Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 50

0
votes
answers
13 views
+10

座標軸中的按鈕(matplotlib)

1

我有一個有許多補丁的現有圖(軸)。我想添加幾個按鈕到現有的軸。如果我編寫下面的代碼,它會將整個軸作爲按鈕,即在軸上的任何地方檢測到單擊。座標軸中的按鈕(matplotlib)

# ax is the reference to axes containing many patches 
bSend = Button(ax, 'send') 
bSend.on_clicked(fu) 

example由matplotlib給出不使用現有座標軸,但採用了全新的軸(?)

# Create axes 
axprev = plt.axes([0.7, 0.05, 0.1, 0.075]) 
axnext = plt.axes([0.81, 0.05, 0.1, 0.075]) 

# Make Buttons of those axes. 
bnext = Button(axnext, 'Next') 
bnext.on_clicked(callback.next) 
bprev = Button(axprev, 'Previous') 
bprev.on_clicked(callback.prev) 

有沒有一種方法,我可以在現有軸位置按鈕?

沙发
0
2

matplotlib.widgets.Button住在它自己的軸,你需要通過第一個參數提供。所以你需要在某處創建一個軸。

取決於你想要達到的目的,你可以簡單地選擇座標軸內,

button_ax = plt.axes([0.4, 0.5, 0.2, 0.075]) #posx, posy, width, height 
Button(button_ax, 'Click me') 

這裏的座標圖中的寬度和高度的單位。因此,按鈕將以數字寬度的40%,數字高度的50%創建,寬度爲20%,高度爲7.5%。

enter image description here

或者,也可將軸用InsetPosition按鈕軸相對於所述副區。

import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 
from mpl_toolkits.axes_grid1.inset_locator import InsetPosition 

fig, ax= plt.subplots() 

button_ax = plt.axes([0, 0, 1, 1]) 
ip = InsetPosition(ax, [0.4, 0.5, 0.2, 0.1]) #posx, posy, width, height 
button_ax.set_axes_locator(ip) 
Button(button_ax, 'Click me') 

plt.show() 

在此,按鈕被定位在軸線寬度40%和其高度的50%時,軸20%的寬度長,和8%的喚起注意。

enter image description here

+0

謝謝你這樣詳細的答案!我認爲可能有一種方法可以將按鈕添加到**現有的座標軸**,並且不會這樣,我將使用「每個按鈕1軸」的方式。謝謝。 – vvy

+0

想想它更像是Button **是**軸。你有一個座標軸可以繪製到另一個座標軸,**是按鈕。所以你要做的是將一個現有的軸轉換成一個Button。 – ImportanceOfBeingErnest

+0

當然。在第二個解析中,我看到你已經使用了'InsetPosition',我喜歡這個。謝謝。 – vvy

0
votes
answers
26 views
+10

Plank輻射公式中對數範圍圖有限範圍

0

我想繪製普朗克輻射方程,如下所示。當我使用Mathematica時,繪圖效果很好,但是當我嘗試用Python來完成時,我無法正確理解它。它基本不會低於?1.0微米波長。請參閱附件圖片和代碼。如果你能提供幫助,這將是非常可觀的。先謝謝你。Plank輻射公式中對數範圍圖有限範圍

import matplotlib.pyplot as plt 
from matplotlib import pyplot 
from matplotlib import pylab 
import numpy as np 

h = 6.626e-34 
c = 2.9979e+8 
k = 1.38e-23 

def planck(wav, T): 
    a = 2.0*3.14*h*c**2 
    b = h*c/(wav*1e3*1e-9*k*T) 
    intensity = a/ (((wav*1e3*1e-9)**5) * (np.exp(b) - 1.0))*1e-6 
    return intensity 

wavelengths = np.logspace(1e-2, 1e2, 1e4, endpoint=False) 

intensity310 = planck(wavelengths, 310.) 
intensity3000 = planck(wavelengths, 3000.) 
intensity5800 = planck(wavelengths, 5800.) 
intensity15000 = planck(wavelengths, 15000.) 

plt.plot(wavelengths, intensity310, 'k-') # 5000K Black line 
plt.plot(wavelengths, intensity3000, 'r-') # 5000K green line 
plt.plot(wavelengths, intensity5800, 'y-') # 6000K blue line 
plt.plot(wavelengths, intensity15000, 'b-') # 7000K Red line 
pyplot.xscale('log') 
pyplot.yscale('log') 
pylab.xlim([1e-2,1e2]) 
pylab.ylim([1,1e10]) 
plt.show() 

使用Python A plot using Python

使用Mathematica

一個計謀的計策

沙发
0
0

。在你的np.logspace()用法是錯誤的。如果您需要1e-21e2之間的值,則應該分別使用參數-22(即np.logspace(-2, 2, 1e4))調用該函數。此外,如果您想創建一個日誌縮放圖,則可以使用pyplot.loglog()函數。沒有必要導入pylab。請參見下面的代碼:

import matplotlib.pyplot as plt 
import numpy as np 

h = 6.626e-34 
c = 2.9979e+8 
k = 1.38e-23 

def planck(wav, T): 
    a = 2.0*3.14*h*c**2 
    b = h*c/(wav*1e3*1e-9*k*T) 
    intensity = a/ (((wav*1e3*1e-9)**5) * (np.exp(b) - 1.0))*1e-6 
    return intensity 

wavelengths = np.logspace(-2, 2, 1e4, endpoint=False) 

intensity310 = planck(wavelengths, 310.) 
intensity3000 = planck(wavelengths, 3000.) 
intensity5800 = planck(wavelengths, 5800.) 
intensity15000 = planck(wavelengths, 15000.) 

plt.loglog(wavelengths, intensity310, 'k-') # 5000K Black line 
plt.loglog(wavelengths, intensity3000, 'r-') # 5000K green line 
plt.loglog(wavelengths, intensity5800, 'y-') # 6000K blue line 
plt.loglog(wavelengths, intensity15000, 'b-') # 7000K Red line 
plt.xlim([1e-2,1e2]) 
plt.ylim([1,1e10]) 
plt.show() 

我碰到下面的情節:

Plot

+0

親愛的阿米特·辛格,這是我所期待的。非常感謝你的幫助。對此,我真的非常感激。 – mocs

+0

不客氣! –

0
votes
answers
33 views
+10

如何在python中以某個角度「降低」圖形

0

我目前正在編寫「正在做」的程序,並繪製DNA樣本的相位分析,並且出現了一些問題:Output plot HERE!右側的圖像來自MATLAB並且是它應該如何看起來的例子。左邊的圖像是從我的程序輸出的。正如你所看到的藍色圖形看起來是正確的,但它是在不同的角度。我檢查過代碼,它和我的程序的MATLAB版本基本相同。無論如何,我會把它放在這裏,也許有一個我不知道的錯誤。但如果不是這樣,是否有一種「轉向/降低」的方式將圖形展示到正確的位置?如何在python中以某個角度「降低」圖形

Python代碼在這裏:

def listIni(size, const=0): 
    return [const] * size 

seq = SeqIO.read("C:/ec.fasta", "fasta") 
seqString = seq.format("fasta") 
seq = seqString[72:] 
seqLen = len(seq) 

phase = listIni(seqLen) 
A = complex(1, 1) 
T = complex(1, -1) 
C = complex(-1, -1) 
G = complex(-1, 1) 

RNL = range(0, seqLen) 
ntLoc = np.asarray(RNL) 


for i in RNL: 
    if seq[i] == "A": 
     phase[i] = np.angle(A) 
    elif seq[i] == "T": 
     phase[i] = np.angle(T) 
    elif seq[i] == "C": 
     phase[i] = np.angle(C) 
    else: 
     phase[i] = np.angle(G) 

arrPh = np.asarray(phase) 
unwrapedPh = np.unwrap(arrPh) 
cumulatedPh = np.cumsum(arrPh) 


plt.plot(ntLoc, unwrapedPh, label='uPhase', color='red') 
plt.plot(ntLoc, cumulatedPh, label='cPhase', color='blue') 
plt.xlabel("Relative nt location") 
plt.ylabel("Angle") 
plt.show() 
沙发
0
0

我只是想通了。除了使用「手動加載順序」正如我在這部分代碼做的:

seq = SeqIO.read("C:/ec.fasta", "fasta") 
seqString = seq.format("fasta") 
seq = seqString[72:] 
seqLen = len(seq) 

我只是用內置的「功能」在Biopython是這樣的:

record = SeqIO.read("C:/ec.fasta", "fasta") 
sequence = record.seq 

和一切工作,因爲它應該。爲什麼它仍然是個謎。 無論如何感謝您的另一個想法和答覆alexblae!

板凳
0
0

我認爲問題出在np.angle定義。

在你的代碼中,我們有

angle('A') -> pi/4 
angle('T') -> -pi/4 
angle('G') -> 3pi/4 
angle('C') -> -3pi/4 

如此明顯的累積和將減少爲負角度。我想您更希望下面的映射:

angle('A') -> pi/4 
angle('T') -> 7pi/4 
angle('G') -> 3pi/4 
angle('C') -> 5pi/4 

一個quick'n'dirty外觀圖釋是

for i in RNL: 
    if seq[i] == "A": 
     phase[i] = np.angle(A) 
    elif seq[i] == "T": 
     phase[i] = np.pi-np.angle(T) 
    elif seq[i] == "C": 
     phase[i] = np.pi-np.angle(C) 
    else: 
     phase[i] = np.angle(G) 

但是這真的取決於你想對應的基地要指出的載體。

0
votes
answers
19 views
+10

頂部和底部的白色空間Python matplotlib圖

1

我必須在Python中繪製表格圖並將此表保存爲jpeg/png。然後在郵件中使用這個圖像。問題是我在圖表的頂部和底部獲得了空白區域。代碼我用來實現這一目標:頂部和底部的白色空間Python matplotlib圖

nrows, ncols = len(df)+1, len(df.columns) 
hcell, wcell = 0.5, 1.5 
hpad, wpad = 0, 0 
fig, ax = plt.subplots(figsize=(ncols*wcell+wpad, nrows*hcell+hpad)) 

ax.axis('off') 
ax.axis('tight') 
ax.xaxis.set_visible(False) 
ax.yaxis.set_visible(False) 

ax.table(cellText=df.values, colLabels=df.columns, loc='center') 
fig.savefig('table1.png', bbox_inches='tight') 

輸出: tabular table 另外,我想給圖表的標題到頂部和左側。 'Some text Here'是標題,黃線顯示我想要另一個標題的位置。 所需的輸出沒有額外的空白在頂部。 Desired

+1

你可能想給我們一個工作示例,所以我們可以複製你的情況,以及它的工作。 – IMCoins

+0

我給了代碼。數據可以複製。 –

+0

答案已經給出wtf – IMCoins

沙发
0
2

一個選項是指定表??格的邊框作爲保存圖形時要使用的邊框。

from matplotlib import pyplot as plt 

fig, ax = plt.subplots() 

colums = ['col1', 'col2'] 
rows = ['row1', 'row2'] 
values = [[0, 1], [1, 0]] 
table = ax.table(cellText=values, colLabels=colums, rowLabels=rows, loc='center') 

ax.axis('off') 

fig.canvas.draw() 
bbox = table.get_window_extent(fig.canvas.get_renderer()) 
bbox_inches = bbox.transformed(fig.dpi_scale_trans.inverted()) 

fig.savefig('plop.png', bbox_inches=bbox_inches) 

plt.show() 

enter image description here

在這種情況下,外線croped因爲線延伸到其位置的兩側。人們仍然可以在表格周圍添加一些填充。例如。有5個像素填充,

bbox = table.get_window_extent(fig.canvas.get_renderer()) 
bbox = bbox.from_extents(bbox.xmin-5, bbox.ymin-5, bbox.xmax+5, bbox.ymax+5) 
bbox_inches = bbox.transformed(fig.dpi_scale_trans.inverted()) 

enter image description here

+0

謝謝,愛你。 – IMCoins

板凳
0
0

我不認爲你可以刪除表格上方和下方的空格。 Reading the documentation,你已經有最高你將永遠實現。

bbox_inches:STR或B-盒,可選

B-盒英寸。只有該圖的給定部分被保存。如果「緊」,試圖找出數字的緊密bbox。如果沒有,使用savefig.bbox

不過,我已經爲你設置正確的行和列的工作示例。 下面是圖片後面的代碼。

from matplotlib import pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 

colums = ['col1', 'col2'] 
rows = ['row1', 'row2'] 
values = [[0, 1], [1, 0]] 
ax.table(cellText=values, colLabels=colums, rowLabels=rows, loc='center') 

ax.axis('off') 
ax.xaxis.set_visible(False) 
ax.yaxis.set_visible(False) 

fig.savefig('plop.png', bbox_inches='tight') 

Result

我強烈建議您調整軸/圖設置後您的情節完全抽出。

+0

當然,你可以擺脫空白,但'bbox_inches ='tight''不會有太大的幫助。只要問題顯示[mcve],我很樂意提供一個答案顯示如何。 – ImportanceOfBeingErnest

+0

我很想知道你會怎麼做。我能找到的唯一方法是使用[Bbox](https://matplotlib.org/api/transformations.html#matplotlib.transforms.Bbox)實例,但我沒有時間來封裝其功能馬上。如果你能夠給我一個直接的信息和我應該研究的選項,我會很高興。 – IMCoins

+0

好吧,我把你的例子用於使用'bbox_inches'的答案。當然還有其他的選擇,比如讓桌子和桌子一樣大。 – ImportanceOfBeingErnest

0
votes
answers
20 views
+10

如何在圖的右側繪製y軸?無需製作子圖

-1

如何更改此代碼以使兩者都能:y軸和y軸標籤顯示在右側?我應該將哪些參數傳遞給plt.ylabel?如何在圖的右側繪製y軸?無需製作子圖

plt.matshow(set_color_matrix, interpolation='nearest',cmap=cmap) 
plt.title("Crystal Growth by DLA", y=1.08) 
plt.xlabel("x", fontdict=dict(weight='bold')) 
plt.ylabel("y", fontdict=dict(weight='bold'), rotation=0) 
plt.savefig("Gifs_and_Images/{}_walkers.png".format(label), dpi=200) 
+0

斧頭和plt有什麼關係?我不明白這個答案與我的案子有什麼關係。如果我沒有弄錯,你必須創建一個子區域。有更直接的方法嗎? – Caterina

+2

plt.tick_params(axis ='y',which ='both',labelleft ='off',labelright ='on') –

+0

你爲什麼不回答問題,而不是評論它?你清楚地回答了這個問題。 – IMCoins

沙发
0
0

這讓我工作,而不需要做一個副劇場。

plt.tick_params(labelleft='off', labelright='on', direction='in', right='on', left='off', bottom='off') 

感謝@NikitaGupta的建議。

0
votes
answers
34 views
+10

3D動畫隨機遊走[Python]

-1

我正在編寫一個函數,它可以在3D中動畫隨機遊走,但不幸的是代碼無法正常工作。情節在哪裏,沒有錯誤發生,但沒有發生。我正在使用%matplotlib tk
有我的代碼:3D動畫隨機遊走[Python]

import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.axes3d as p3 
import matplotlib.animation as animation 

def path_generator(steps, step): 
    path = np.empty((3, steps)) 
    for i in range(1, steps): 
     x_ran, y_ran, z_ran = np.random.rand(3) 
     sgnX = (x_ran - 0.5)/abs(x_ran - 0.5) 
     sgnY = (y_ran - 0.5)/abs(y_ran - 0.5) 
     sgnZ = (z_ran - 0.5)/abs(z_ran - 0.5) 
     dis = np.array([step*sgnX, step*sgnY, step*sgnZ]) 
     path[:, i] = path[:, i - 1] + dis 

    return path 

def animate(i): 
    global particles, trajectories 
    for trajectory, particle in zip(trajectories, particles): 

    trajectory.set_data(particle[0:2, :i]) 

    trajectory.set_3d_properties(particle[2, :i]) 

return trajectories 

def random_walk_3D_animated(n, traj = 1): 

    fig = plt.figure() 
    ax = p3.Axes3D(fig) 

    particles = [path_generator(n, 1) for i in range(traj)] 

    trajectories = [ax.plot(particle[0, 0:1], particle[1, 0:1], particle[2, 
        0:1])[0] for particle in particles] 

    ax.set_xlim3d([-100, 100]) 
    ax.set_ylim3d([-100, 100]) 
    ax.set_zlim3d([-100, 100]) 

    animacion = animation.FuncAnimation(fig, animate, 1000, interval=50, 
             blit=False) 

    plt.show() 

什麼奇怪的是,當沒有功能random_walk_3D_animated(n, traj = 1)ntraj給出的數值的代碼做的工作。有時代碼不會從(0,0,0)開始隨機遊走。我想知道爲什麼。

+0

我已經評論說,你需要返回動畫參考你的最後一個問題如下。你會不會永遠問「隨機遊走」問題? – ImportanceOfBeingErnest

+0

我知道我一直在問這個問題一段時間,我真的很抱歉。自從上一次以來,我取得了很大進步:)不幸的是,我不知道如何返回對動畫的引用 – Hendrra

沙发
0
1
  1. 開始位置將是emty數組的內容。這可能是任何值,所以它在這裏並不真正有用。而是用零初始化path
  2. 您需要返回對動畫的引用。從animation documentation:「[..]保持對實例對象的引用至關重要。」

完整的示例:

import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.axes3d as p3 
import matplotlib.animation as animation 

def path_generator(steps, step): 
    path = np.zeros((3, steps)) 
    for i in range(1, steps): 
     x_ran, y_ran, z_ran = np.random.rand(3) 
     sgnX = (x_ran - 0.5)/abs(x_ran - 0.5) 
     sgnY = (y_ran - 0.5)/abs(y_ran - 0.5) 
     sgnZ = (z_ran - 0.5)/abs(z_ran - 0.5) 
     dis = np.array([step*sgnX, step*sgnY, step*sgnZ]) 
     path[:, i] = path[:, i - 1] + dis 

    return path 

def animate(i): 
    global particles, trajectories 
    for trajectory, particle in zip(trajectories, particles): 
     trajectory.set_data(particle[0:2, :i]) 
     trajectory.set_3d_properties(particle[2, :i]) 

def random_walk_3D_animated(n, traj = 1): 
    global particles, trajectories 
    fig = plt.figure() 
    ax = p3.Axes3D(fig) 

    particles = [path_generator(n, 1) for i in range(traj)] 
    trajectories = [ax.plot(particle[0, 0:1], particle[1, 0:1], particle[2, 
        0:1])[0] for particle in particles] 
    ax.set_xlim3d([-100, 100]) 
    ax.set_ylim3d([-100, 100]) 
    ax.set_zlim3d([-100, 100]) 

    animacion = animation.FuncAnimation(fig, animate, 1000, interval=50, 
             blit=False) 
    return animacion 

ani = random_walk_3D_animated(100, traj = 1) 
plt.show() 
+0

非常感謝!現在我完成了。再一次 - 我真的很抱歉,但這是我第一次嘗試動畫劇情。 – Hendrra

0
votes
answers
24 views
+10

Qt5 Matplotlib Designer插件

1

我正在使用Python 3.6和PyQt-5.9.1與Qt Designer進行UI設計,我需要包含一些matplotlib圖。我發現爲了不修改從ui文件生成的python代碼,每次更新gui部分(這是Qt Designer的預期),我需要一個MatplotlibWidget插件set-在Qt設計器中。Qt5 Matplotlib Designer插件

我的問題是,我發現這個插件的引用是來自基於Python 2.7的Python(x,y)包,並且不適用於Python 3.x;或者PyQtdesginerplugins包在Python 3.x/Qt5環境中不起作用(已在此問題How do I add matplotlib plugin to Qt5.4 Designer plugins?中指出)。

有沒有可能在我的Python 3.6和Qt5環境中添加一個MatplotlibWidget到Qt Designer?這將有助於我們充分利用Qt Designer從應用程序邏輯中分離出ui。

+0

我不知道是否有這樣的插件可用。但通常你不會需要它。您只需在GUI中留下一些空間,並通過代碼將matplotlib畫布(它是一個QWidget)添加到它。 – ImportanceOfBeingErnest

+0

如果你看,例如在[這個問題](https://stackoverflow.com/questions/46391356/embed-a-matplotlib-graphic-into-a-widget-pyqt5)有一部分是通過一些用戶界面設計師和部分是運行應用程序的代碼。你不會操縱前者,但在後者中添加你的小部件。 – ImportanceOfBeingErnest

+0

感謝promt回覆。事實上,它只需少量額外的工作就可以這樣工作除非別人知道一個神奇的qtdesigner插件,否則我會走這條路。 – Thib

沙发
0
1

下面你會發現一個用於Qt設計器的MatplotlibPlugin的PyQt5版本。

要使用它,請將兩個文件放在PYQTDESIGNERPATH環境變量中包含的目錄中,或放入directories that Qt Designer searches for its own plugins之一的「python」子目錄中。這兩個文件必須完全按照如下所示進行命名。

matplotlibwidget.py

from PyQt5.QtCore import QSize 
from PyQt5.QtWidgets import QSizePolicy 
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Canvas 
from matplotlib.figure import Figure 
from matplotlib import rcParams 

rcParams['font.size'] = 9 


class MatplotlibWidget(Canvas): 
    def __init__(self, parent=None, title='', xlabel='', ylabel='', 
       xlim=None, ylim=None, xscale='linear', yscale='linear', 
       width=4, height=3, dpi=100): 
     self.figure = Figure(figsize=(width, height), dpi=dpi) 
     self.axes = self.figure.add_subplot(111) 
     self.axes.set_title(title) 
     self.axes.set_xlabel(xlabel) 
     self.axes.set_ylabel(ylabel) 
     if xscale is not None: 
      self.axes.set_xscale(xscale) 
     if yscale is not None: 
      self.axes.set_yscale(yscale) 
     if xlim is not None: 
      self.axes.set_xlim(*xlim) 
     if ylim is not None: 
      self.axes.set_ylim(*ylim) 

     super(MatplotlibWidget, self).__init__(self.figure) 
     self.setParent(parent) 
     super(MatplotlibWidget, self).setSizePolicy(
      QSizePolicy.Expanding, QSizePolicy.Expanding) 
     super(MatplotlibWidget, self).updateGeometry() 

    def sizeHint(self): 
     return QSize(*self.get_width_height()) 

    def minimumSizeHint(self): 
     return QSize(10, 10) 

matplotlibplugin.py

import os 
from PyQt5.QtGui import QIcon 
from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin 
from matplotlib import rcParams 
from matplotlibwidget import MatplotlibWidget 

rcParams['font.size'] = 9 


class MatplotlibPlugin(QPyDesignerCustomWidgetPlugin): 
    def __init__(self, parent=None): 
     super(MatplotlibPlugin, self).__init__(parent) 
     self._initialized = False 

    def initialize(self, editor): 
     self._initialized = True 

    def isInitialized(self): 
     return self._initialized 

    def createWidget(self, parent): 
     return MatplotlibWidget(parent) 

    def name(self): 
     return 'MatplotlibWidget' 

    def group(self): 
     return 'PyQt' 

    def icon(self): 
     return QIcon(os.path.join(
      rcParams['datapath'], 'images', 'matplotlib.png')) 

    def toolTip(self): 
     return '' 

    def whatsThis(self): 
     return '' 

    def isContainer(self): 
     return False 

    def domXml(self): 
     return '<widget class="MatplotlibWidget" name="mplwidget">
'  
       '</widget>
' 

    def includeFile(self): 
     return 'matplotlibwidget' 
+0

謝謝!我嘗試了你所說的,但我無法讓Matplotlib小部件顯示在Qtdesigner界面中。 – Thib

+0

你是如何設置'PYQTDESIGNERPATH'的?你在哪個平臺上? – ekhumoro

+0

謝謝!我嘗試了你所說的,但我無法讓Matplotlib小部件顯示在Qtdesigner界面中。我已將.py文件複製到設計器插件目錄中,並添加了envt變量。看起來行Qtdesigner預計.dll作爲插件,至少當我進入插件信息框,我只看到pyqt5.dll – Thib

0
votes
answers
27 views
+10

指定日期爲x軸的多個Y軸曲線

0

我有一個dateframe,看起來像這樣:指定日期爲x軸的多個Y軸曲線

A B date 
0 8 9 2017-01-01 
1 6 7 2017-01-02 
2 2 5 2017-01-03 
3 3 12 2017-01-04 
4 5 15 2017-01-05 

我想在基於dataframe.date的同時繪製從dataframe.Adataframe.B值x軸。

我目前擁有的是:

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 

dates = pd.date_range('01-01-2017','01-05-2017') 

np.random.seed(seed=1111) 
data_a = np.random.randint(1, high=10, size=5) 
data_b = np.random.randint(1, high=17, size=5) 
df = pd.DataFrame({'date': dates, 'A': data_a, 'B': data_b}) 

fig, ax = plt.subplots() 

df.A.plot(ax=ax, style='b-') 
df.B.plot(ax=ax, style='r-', secondary_y=True) 

enter image description here

如何更改x軸?

沙发
0
0

製作日期列索引的工作原理:

df = df.set_index(df.date) 

現在:

df.A.plot(ax=ax, style='b-') 
df.B.plot(ax=ax, style='r-', secondary_y=True) 

enter image description here

0
votes
answers
21 views
+10

在Python中解壓值

2

這可能是一個基本問題,但是在下面的代碼中,line, =是什麼?在Python中解壓值

 
import numpy as np 
import matplotlib.pyplot as plt 

ax = plt.subplot(111) 

t = np.arange(0.0, 5.0, 0.01) 
s = np.cos(2*np.pi*t) 
line, = plt.plot(t, s, lw=2) 

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5), 
      arrowprops=dict(facecolor='black', shrink=0.05), 
      ) 

plt.ylim(-2,2) 
plt.show()

我試圖用一個簡單的例子a, = 1這引發錯誤int對象不是可迭代,這a, = 1,作品。

那麼var, =呢?

+0

我很好奇,你從'打印得到什麼(行)''後行= plt.plot(T,S,LW = 2 )'。我無法測試atm,但我不知道'plot()返回了任何東西。 – roganjosh

+0

@roganjosh完全參考[添加文本](https://matplotlib.org/users/pyplot_tutorial.html#annotating-text) – bhansa

+0

@roganjosh它返回一個Line2D對象'Line2D(_line0)' – bhansa

沙发
0
1

致電plt.plot(t, s, lw=2)返回tuple一個element。然後將其解壓縮到variableline

同樣的邏輯可以在這裏看到:

>>> a = tuple([1]) 
>>> a 
(1,) 
>>> b, = a 
>>> b 
1 
+0

哦!看起來像單元素的元組。 – bhansa

+0

@bhansa確實!我試圖表明,在我的回答中,可能並不清楚...... –

0
votes
answers
25 views
+10

如何居中對齊seaborn中旋轉的yticklabels?

0

我想通過seaborn繪製一個混淆矩陣,但當它們旋轉到90度時無法將yticklabels居中對齊。雖然 ha工作沒有旋轉,但旋轉失敗。這裏是最小的工作示例 -如何居中對齊seaborn中旋轉的yticklabels?

import numpy as np 
import seaborn as sns 
import matplotlib.pyplot as plt 

cmat = np.matrix([[2, 3], [4, 5]]) 
fig, ax = plt.subplots(figsize=(4, 4)) 

sns.heatmap(cm_greina, annot=True, xticklabels=['Faulty', 'Healthy'], cbar=False, ax=ax) 
ax.set_yticklabels(['Faulty', 'Healthy'], rotation=90, ha='center') 

任何幫助將不勝感激。

+1

嘗試加入'rotation_mode ='anchor'' –

+0

完美!這工作!感謝您的及時迴應。 –

+0

你們中的一個人會發佈一個答案,所以這個問題被關閉了嗎? –

沙发
0
1

而是水平排列的,你可能想使用垂直對齊方式:

import numpy as np 
import seaborn as sns 
import matplotlib.pyplot as plt 

cmat = np.matrix([[2, 3], [4, 5]]) 
fig, ax = plt.subplots(figsize=(4, 4)) 

sns.heatmap(cmat, annot=True, xticklabels=['Faulty', 'Healthy'], cbar=False, ax=ax) 
ax.set_yticklabels(['Faulty', 'Healthy'], va='center', rotation = 90, position=(0,0.28)) 
plt.show()