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: 5

0
votes
answers
19 views
+10

matplotlib數據點之間的相等間距

1

我正在嘗試繪製一些數據,其中x軸顯示數據點之間的等距間距。matplotlib數據點之間的相等間距

代碼:

#!/usr/bin/env python 
from matplotlib import pyplot as plt 

sizes = [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700] 
prices = [245, 312, 279, 308, 199, 219, 405, 324, 319, 255] 

plt.xlim([1000, 2500]) 
plt.ylim([0, 500]) 
plt.xlabel("sizes") 
plt.ylabel("prices") 

plt.scatter(sizes, prices) 
plt.show() 

如何看起來: enter image description here 我多麼希望它看起來:

https://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html

所以每兩個相鄰之間的距離分相等。

+2

這似乎沒有多大意義。如果x軸是一個帶有單位的軸,並且你確實有相應的值(這裏是「尺寸」),那麼完整的情節就會按照你的要求進行僞造。 – ImportanceOfBeingErnest

沙发
0
2

所以,看起來你的圖只是爲了表示的目的。 x軸上的數字不需要按比例。爲了繪製這個圖表,您必須創建一個實際按比例縮放的軸列表,並用您的sizes列表中的元素替換其標籤。下面的代碼顯示瞭如何做到這一點

#!/usr/bin/env python 
from matplotlib import pyplot as plt 

sizes = [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700] 
prices = [245, 312, 279, 308, 199, 219, 405, 324, 319, 255] 

plt.ylim([0, 500]) 
plt.xlabel("sizes") 
plt.ylabel("prices") 

x = [a for a in range(len(sizes))] 
plt.scatter(x,prices) 
plt.xticks(x, sizes) 
plt.show() 
+0

原來,這並沒有太大的意義,但你的答案是正確的。謝謝! – cie

0
votes
answers
54 views
+10

將圖表保存到PNG時不顯示酒吧

0

我很新的程序員,我將png保存到條形圖的問題,酒吧沒有顯示出來。將圖表保存到PNG時不顯示酒吧

我的代碼:

import numpy as np 
import matplotlib.pyplot as plt 

N = 3 
ind = np.arange(N) 
width = 0.35 

Start_means = (100, 50, 50) 
Start_std = (2, 3, 4) 

End_means = (80, 30, 30) 
End_std = (3, 5, 2) 

fig, ax = plt.subplots() 
rects1 = ax.bar(ind, Start_means, width, color='xkcd:red', yerr=Start_std) 
rects2 = ax.bar(ind+width, End_means, width, color='xkcd:black', yerr=End_std) 

ax.legend((rects1[0], rects2[0]), ('Start', 'End')) 
ax.set_ylabel('Available') 
ax.set_title('Travel availability, by tour') 
ax.set_xticks(ind + width/2) 
countries = ['Italy', 'China', 'France'] 
ids = ['ID:12345', 'ID:13579', 'ID:24680'] 

xlabels = [] 
for i, j in zip(countries, ids): 
    xlabels.append(i + '
' + j) 

ax.set_xticklabels(xlabels) 

def autolabel(rects): 
    for rect in rects: 
     height = rect.get_height() 
     ax.text(rect.get_x() + rect.get_width()/2., 1.05*height, 
       '%d' % int(height), 
       ha='center', va='bottom') 
autolabel(rects1) 
autolabel(rects2) 

plt.show() 
plt.savefig('barchart.png') 

它應該是什麼樣子:here 我想將它保存爲png文件,但它只是出現空白沒有豎線。

沙发
0
1

你只需要交換的順序的plt.show()出現和plt.savefig('barchart.png')

plt.savefig('barchart.png') 
plt.show() 

之所以plt.savefig不會調用展後工作是 目前的數字已經被重置。

來源:https://stackoverflow.com/a/21884187/1577947

0
votes
answers
41 views
+10

在Python中導入matplotlib

0

在Mac OS 10.13上我有anaconda和Python 3.6.3。我正在學習Python並希望導入matplotlib。但是,當我嘗試運行「使用Python進行數學運算」第2章中的程序時,我不斷收到ModuleNotFoundError。在Python中導入matplotlib

關於如何克服這個障礙的任何想法?

+0

嘗試使用'pip install matplotlib',然後嘗試導入它。告訴我它是否有效。你是否也只在Mac中使用一個用戶?模塊需要安裝在想要使用它的特定用戶中。 –

+0

它爲終端? –

+0

是的,在你的終端。你需要有點子。如果你沒有點子,去谷歌如何安裝它。並去https://matplotlib.org/faq/installing_faq.html如何用pip安裝matplotlib。 –

沙发
0
0

使用anaconda時,可以使用conda安裝matplotlib;在命令行中輸入:

conda install matplotlib 
+0

我這樣做,它說它已經安裝。當我爲簡單的情節運行程序時,導入命令應該在Python(IDLE)中讀取什麼? –

0
votes
answers
25 views
+10

標籤多維陣列的每個輸出被繪製

2

工作實施例:標籤多維陣列的每個輸出被繪製

%matplotlib inline 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.integrate import odeint 

def BoatFishSystem(state, t, *args): 
    '''http://www.danham.me/r/2015/10/29/differential-eq.html''' 
    A = args[0] 
    B = args[1] 
    C = args[2] 
    fish, boat = state 
    d_fish = fish * (A - boat - fish) 
    d_boat = -boat * (B - C * fish) 
    return [d_fish, d_boat] 

A = 2.0 
B = 1.0 
C = 1.5 
params = (A, B, C) 
n_steps = 100000 
t = np.linspace(0, 20, n_steps) 
init_state = [1, 1] 
species = odeint(BoatFishSystem, init_state, t, args = (params)) 

plt.plot(t, species, label = ['a', 'b']) 
plt.legend() 
plt.show() 

期望的結果: 一個輸出線被標記爲「A」,另一種「B」

當前結果: 兩個線被標記爲[ '一', 'b']

沙发
0
0

移動標記引入plt.legend()

plt.plot(t, species) 
plt.legend(['a', 'b']) 

enter image description here

+0

謝謝!我真的很感謝答案。 – NicholasDeLateur

+0

不客氣!如果此答案解決了您的問題,請點擊答案旁邊的複選標記將其標記爲已接受。 –

0
votes
answers
50 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
33 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
32 views
+10

設置joyplot的x軸標籤

1

我寫下面的代碼來可視化一個joyplot。當試圖改變使用axes.set_xticks x軸的標籤,我得到AttributeError: 'list' object has no attribute 'set_xticks'設置joyplot的x軸標籤

import joypy 
import pandas as pd 
from matplotlib import pyplot as plt 

data = pd.DataFrame.from_records([['twitter', 1], 
['twitter', 6], 
['wikipedia', 1], 
['wikipedia', 3], 
['indymedia', 1], 
['indymedia', 9]], columns=['platform','day']) 

# Get number of days in the dataset 
numdays = max(set(data['day'].tolist())) 

# Generate date strings from a manually set start date 
start_date = "2010-01-01" 
dates = pd.date_range(start_date, periods=numdays) 
dates = [str(date)[:-9] for date in dates] 

fig, axes = joypy.joyplot(data,by="platform") 
axes.set_xticks(range(numdays)); axes.set_xticklabels(dates) 

plt.show() 

預期的輸出應該類似於以下但從dates日期爲ticklabels。

enter image description here

+0

感謝。我得到'AttributeError:'list'object has no attribute'set_xticks'' – textnet

+0

@ImportanceOfBeingErnest對不起。我現在編輯了原始文章,以便它是完整的,可驗證的,並且希望最小化。 – textnet

沙发
0
1

由於joypy.joyplot(..)回報figureaxesaxes元組應該是軸的列表中,您可能需要設置標籤的最後軸,

axes[-1].set_xticks(range(numdays)) 
axes[-1].set_xticklabels(dates) 
+0

這工作。我編輯了原始文章,以便它不需要數據csv。 – textnet

板凳
0
0

爲了日期地塊與python matplotlib你應該使用plot_date函數。

圖,AX = plt.subplots()
ax.plot_date(日期,數據1, ' - ')

我把完整的例子在引擎收錄,按照鏈接: https://pastebin.com/sVPUZaeM

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from matplotlib.dates import DateFormatter 
from random import randrange, random 
from datetime import datetime 

#generate date list 
start_date = np.datetime64('2010-01-01').astype(datetime) 
numdays = 10 
dates = pd.date_range(start_date, periods=numdays) 

#Generate data example 
data1 = [(random()+idx)**1.2 for idx in range(len(dates))] 
data2 = [(random()+idx)**1.5 for idx in range(len(dates))] 

#plot 
fig, ax = plt.subplots() 
ax.plot_date(dates, data1, '-') 
ax.plot_date(dates, data2, '-') 

#set the label for x and y and title 
plt.title('Matplot lib dates wc example') 
plt.xlabel('Dates') 
plt.ylabel('Random values example') 

#date format 
ax.fmt_xdata = DateFormatter('%Y%m%d') 
ax.grid(True) 
fig.autofmt_xdate() 

plt.show() 

Python版本成功測試:2.7.12
此代碼生成:this follow plot

0
votes
answers
45 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
67 views
+10

雖然沒有錯誤,但不起作用的動畫[Python]

-1

我正在用Python編碼隨機遊走我的第二維。我想動畫如何「增長」。我想使用matplotlib中的animation.FuncAnimation,但不幸的是,它不起作用,因爲我想。沒有錯誤,但我在iPython控制檯中使用了%matplotlib tk
我的代碼:雖然沒有錯誤,但不起作用的動畫[Python]

def random_walk_animated_2D(n, how_many = 1): 

    possible_jumps = np.array([[0, 1], [1, 0], [-1, 0], [0, -1]]) 
    where_to_go = np.random.randint(4, size = n) 
    temp = possible_jumps[where_to_go, :] 
    x = np.array([[0, 0]]) 
    temp1 = np.concatenate((x, temp), axis = 0) 
    trajectory = np.cumsum(temp1, axis = 0) 

    fig = plt.figure() 
    ax = plt.axes(xlim = (np.amin(trajectory, axis = 0)[0], np.amax(trajectory, axis = 0)[0]), 
        ylim = (np.amin(trajectory, axis = 0)[1], np.amax(trajectory, axis = 0)[1])) 
    line, = ax.plot([], [], lw = 2) 

    def init(): 
     line.set_data([], []) 
     return line, 

    def animate(i): 
     line.set_data(trajectory[i, 0], trajectory[i, 1]) 
     return line, 

    anim = animation.FuncAnimation(fig, animate, init_func = init, 
            frames = 200, interval = 30, blit = True) 
    plt.show() 

遺憾的是沒有運行的功能後會發生。 Screenshot of the plot

後來我想添加在劇情中生成多個隨機遊走的可能性(我的意思是我希望他們同時生成)。我該怎麼做?

沙发
0
0

不可能通過一個點畫一條線。
如果要繪製直線圖,則參數plot或直線的set_data方法必須至少有兩個點。

而不是line.set_data(trajectory[i, 0], trajectory[i, 1])你可能想

line.set_data(trajectory[:i, 0], trajectory[:i, 1]) 

密謀通過所有點排隊到i個點。

+0

不幸的是:( – Hendrra

+0

)如果你沒有看到一個動畫,如果你糾正了代碼本身,那是因爲你沒有對動畫的引用,讓你的函數返回動畫,當在IPython中運行時,你不一定需要'plt.show()'。 – ImportanceOfBeingErnest

0
votes
answers
35 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