Ⅰ 用python畫圖
今天開始琢磨用Python畫圖,沒使用之前是一臉懵的,我使用的開發環境是Pycharm,這個輸出的是一行行命令,這個圖畫在哪裡呢?
搜索之後發現,它會彈出一個對話框,然後就開始畫了,比如下圖
第一個常用的庫是Turtle,它是Python語言中一個很流行的繪制圖像的函數庫,這個詞的意思就是烏龜,你可以想像下一個小烏龜在一個x和y軸的平面坐標系裡,從原點開始根據指令控制,爬行出來就是繪制的圖形了。
它最常用的指令就是旋轉和移動,比如畫個圓,就是繞著圓心移動;再比如上圖這個怎麼畫呢,其實主要就兩個命令:
turtle.forward(200)
turtle.left(170)
第一個命令是移動200個單位並畫出來軌跡
第二個命令是畫筆順時針轉170度,注意此時並沒有移動,只是轉角度
然後呢? 循環重復就畫出來這個圖了
好玩吧。
有需要仔細研究的可以看下這篇文章 https://blog.csdn.net/zengxiantao1994/article/details/76588580 ,這個牛人最後用這個庫畫個移動的鍾表,太贊了。
Turtle雖好玩,但是我想要的是我給定數據,然後讓它畫圖,這里就找到另一個常用的畫圖的庫了。
Matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地行制圖。其中,matplotlib的pyplot模塊一般是最常用的,可以方便用戶快速繪制二維圖表。
使用起來也挺簡單,
首先import matplotlib.pyplot as plt 導入畫圖的圖。
然後給定x和y,用這個命令plt.plot(x, y)就能畫圖了,接著用plt.show()就可以把圖形展示出來。
接著就是各種完善,比如加標題,設定x軸和y軸標簽,范圍,顏色,網格等等,在 https://blog.csdn.net/guoziqing506/article/details/78975150 這篇文章里介紹的很詳細。
現在互聯網的好處就是你需要什麼內容,基本上都能搜索出來,而且還是免費的。
我為什麼要研究這個呢?當然是為了用,比如我把比特幣的曲線自己畫出來可好?
假設現在有個數據csv文件,一列是日期,另一列是比特幣的價格,那用這個命令畫下:
這兩列數據讀到pandas中,日期為df['time']列,比特幣價格為df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下圖:
自己畫的是不是很香,哈哈!
然後呢,我在上篇文章 https://www.jianshu.com/p/d4013d8a73de 中介紹過求Ahr999指數,那可不可以也放到這張圖中呢?不就是加一條命令嘛
plt.plot(df['time'], df['Ahr999'])
圖形如下:
但是,Ahr999指數怎麼就一條線不動啊, 原來兩個Y軸不一致,顯示出來太怪了,需要用多Y軸,問題來了。
繼續谷歌一下,把第二個Y軸放右邊就行了,不過呢得使用多圖,重新繪制
fig = plt.figure() # 多圖
ax1 = fig.add_subplot(111)
ax1.plot(df['time'], df['ini'], label="BTC price") # 繪制第一個圖比特幣價格
ax1.set_ylabel('BTC price') # 加上標簽
# 第二個直接對稱就行了
ax2 = ax1.twinx()# 在右邊增加一個Y軸
ax2.plot(df['time'], df['Ahr999'], 'r', label="ahr999") # 繪制第二個圖Ahr999指數,紅色
ax2.set_ylim([0, 50])# 設定第二個Y軸范圍
ax2.set_ylabel('ahr999')
plt.grid(color="k", linestyle=":")# 網格
fig.legend(loc="center")#圖例
plt.show()
跑起來看看效果,雖然丑了點,但終於跑通了。
這樣就可以把所有指數都繪制到一張圖中,等等,三個甚至多個Y軸怎麼加?這又是一個問題,留給愛思考愛學習的你。
有了自己的數據,建立自己的各個指數,然後再放到圖形界面中,同時針對異常情況再自動進行提醒,比如要抄底了,要賣出了,用程序做出自己的晴雨表。
Ⅱ 怎樣用python畫圖
思路:
1. 確定好需要畫的圖。
2. 創建一個畫布,用來畫你需要的圖。
(1)畫布大小,可以使用默認大小,也可以自定義畫布大小。
(2)畫布背景色bgcolor()。
(3)確定起點位置。
3. 畫筆的設置。
(1)畫筆的大小,顏色。
(2)畫筆運行屬性。
二、定義畫布參數
importturtleast
t.screensize(width=None,heigh=None,bg=None)#以像素為單位,參數分別為畫布的寬,高,背景色
t.screensize()#返回默認大小(400,300)
t.Screen()#也是表示默認畫布大小,注意S大寫
t.setup(w=0.5,h=0.75,startx=None,starty=None)#w,h為整數是表示像素,為小數時表示占據電腦屏幕的比例
#startx,starty坐標表示矩形窗口左上角頂點的位置,默認為屏幕中心位置
三、定義畫筆
1、畫筆的狀態
在畫布上默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一隻面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向),turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。
2、畫筆的屬性
畫筆(畫筆的屬性,顏色、畫線的寬度)
(1)turtle.pensize():設置畫筆的寬度;
(2)turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字元串如"green","red",也可以是RGB 3元組;
>>>pencolor('brown')
>>>tup=(0.2,0.8,0.55)
>>>pencolor(tup)
>>>pencolor()
'#33cc8c'
(3)turtle.speed(speed):設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。
相關推薦:《Python入門教程》
3、繪圖命令
操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。
(1)畫筆運動命令:
(3)全局控制命令:
四、命令詳解
turtle.circle(radius,extent=None,steps=None)
描述:以給定半徑畫圓
參數:
radius(半徑);半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓;
extent(弧度) (optional);
steps (optional) (做半徑為radius的圓的內切正多邊形,多邊形邊數為steps);
舉例:
circle(50)#整圓;
circle(50,steps=3)#三角形;
circle(120,180)#半圓
五、繪圖舉例
(1)菱形太陽花
importturtleast#turtle庫是python的內部庫,直接import使用即可
defdraw_diamond(turt):
foriinrange(1,3):
turt.forward(100)#向前走100步
希望我的回答對你有幫助
Ⅲ python畫圖縱坐標
簡單的可以這樣,舉個例子,數據就直接用圖片中的一部分:
frompylabimport*
fromdatetimeimportdatetime
data_str="""2016-06-15_16:2599.7324
2016-06-15_17:2599.7323
2016-06-15_18:2599.7322
2016-06-15_19:2599.7349
2016-06-15_20:2599.7207"""
lines=data_str.split(' ')
X_labels=[]
X=[]
Y=[]
forlineinlines:
xy=line.split()
X_labels.append(xy[0])
X.append(datetime.strptime(xy[0],"%Y-%m-%d_%H:%M"))
Y.append(float(xy[1]))
figure(figsize=(8,6))
plot(X,Y,'b.-')
grid(True)
xticks(X,X_labels,rotation=90)
subplots_adjust(bottom=0.35)
savefig('graph.png')
show()
畫出來效果如上所示。
數據多了的時候有些參數要自己調整一下。
Ⅳ python畫圖:,橫坐標是點數(1到1000),縱坐標是大小不同的數值,即如何用顏色的深淺代表數值的大小
1、首先在python軟體中,創建一個響應滑鼠的自定義函數,當滑鼠在畫布上面點擊一下,就畫一個圓。
Ⅳ python turtle繪圖教程
python turtle繪圖教程如下:
1、使用海龜繪圖首先我們需要導入turtle。
畫布就是turtle展開用於繪圖區域,可以設置它的大小和初始位置。
turtle.screensize(canvwidth=None,canvheight=None,bg=None),參數分別為畫布的寬(單位像素),高,背景顏色。
在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一隻面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位搏隱置),面朝x軸正方向(方向),turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。
Ⅵ Python 數據可視化:分類特徵統計圖
上一課已經體驗到了 Seaborn 相對 Matplotlib 的優勢,本課將要介紹的是 Seaborn 對分類數據的統計,也是它的長項。
針對分類數據的統計圖,可以使用 sns.catplot 繪制,其完整參數如下:
本課使用演繹的方式來學習,首先理解這個函數的基本使用方法,重點是常用參數的含義。
其他的參數,根據名稱也能基本理解。
下面就依據 kind 參數的不同取值,分門別類地介紹各種不同類型的分類統計圖。
讀入數據集:
然後用這個數據集制圖,看看效果:
輸出結果:
毫無疑問,這里繪制的是散點圖。但是,該散點圖的橫坐標是分類特徵 time 中的三個值,並且用 hue='kind' 又將分類特徵插入到圖像中,即用不同顏色的的點代表又一個分類特徵 kind 的值,最終得到這些類別組合下每個記錄中的 pulse 特徵值,並以上述圖示表示出來。也可以理解為,x='time', hue='kind' 引入了圖中的兩個特徵維度。
語句 ① 中,就沒有特別聲明參數 kind 的值,此時是使用默認值 'strip'。
與 ① 等效的還有另外一個對應函數 sns.stripplot。
輸出結果:
② 與 ① 的效果一樣。
不過,在 sns.catplot 中的兩個參數 row、col,在類似 sns.stripplot 這樣的專有函數中是沒有的。因此,下面的圖,只有用 sns.catplot 才能簡潔直觀。
輸出結果:
不過,如果換一個叫角度來說,類似 sns.stripplot 這樣的專有函數,表達簡單,參數與 sns.catplot 相比,有所精簡,使用起來更方便。
仔細比較,sns.catplot 和 sns.stripplot 兩者還是稍有區別的,雖然在一般情況下兩者是通用的。
因此,不要追求某一個是萬能的,各有各的用途,存在即合理。
不過,下面的聲明請注意: 如果沒有非常的必要,比如繪制分區圖,在本課中後續都演示如何使用專有名稱的函數。
前面已經初步解釋了這個函數,為了格式完整,這里再重復一下,即 sns.catplot 中參數 kind='strip'。
如果非要將此函數翻譯為漢語,可以稱之為「條狀散點圖」。以分類特徵為一坐標軸,在另外一個坐標軸上,根據分類特徵,將該分類特徵數據所在記錄中的連續值沿坐標軸描點。
從語句 ② 的結果圖中可以看到,這些點雖然縱軸的數值有相同的,但是沒有將它們重疊。因此,我們看到的好像是「一束」散點,實際上,所有點的橫坐標都應該是相應特徵分類數據,也不要把分類特徵的值理解為一個范圍,分散開僅僅是為了圖示的視覺需要。
輸出結果:
④ 相對 ② 的圖示,在於此時同一縱軸值的都重合了——本來它們的橫軸值都是一樣的。實現此效果的參數是 jitter=0,它可以表示點的「振動」,如果默認或者 jitter=True,意味著允許描點在某個范圍振動——語句 ② 的效果;還可設置為某個 0 到 1 的浮點,表示許可振動的幅度。請對比下面的操作。
輸出結果:
語句 ② 中使用 hue='kind' 參數向圖中提供了另外一個分類特徵,但是,如果感覺圖有點亂,還可以這樣做:
輸出結果:
dodge=True 的作用就在於將 hue='kind' 所引入的特徵數據分開,相對 ② 的效果有很大差異。
並且,在 ⑤ 中還使用了 paletter='Set2' 設置了色彩方案。
sns.stripplot 函數中的其他有關參數,請讀者使用幫助文檔了解。
此函數即 sns.catplot 的參數 kind='swarm'。
輸出結果:
再繪制一張簡單的圖,一遍研究這種圖示的本質。
輸出結果:
此圖只使用了一個特徵的數據,簡化表象,才能探究 sns.swarmplot 的本質。它同樣是將該特徵中的數據,依據其他特徵的連續值在圖中描點,並且所有點在默認情況下不彼此重疊——這方面與 sns.stripplot 一樣。但是,與之不同的是,這些點不是隨機分布的,它們經過調整之後,均勻對稱分布在分類特徵數值所在直線的兩側,這樣能很好地表示數據的分布特點。但是,這種方式不適合「大數據」。
sns.swarmplot 的參數似乎也沒有什麼太特殊的。下面使用幾個,熟悉一番基本操作。
在分類維度上還可以再引入一個維度,用不同顏色的點表示另外一種類別,即使用 hue 參數來實現。
輸出結果:
這里用 hue = 'smoker' 參數又引入了一個分類特徵,在圖中用不同顏色來區分。
如果覺得會 smoker 特徵的值都混在一起有點亂,還可以使用下面方式把他們分開——老調重彈。
輸出結果:
生成此效果的參數就是 dodge=True,它的作用就是當 hue 參數設置了特徵之後,將 hue 的特徵數據進行分類。
sns.catplot 函數的參數 kind 可以有三個值,都是用於繪制分類的分布圖:
下面依次對這三個專有函數進行闡述。
Ⅶ Python matplotlib之函數圖像繪制、線條rc參數設置
為避免中文顯示出錯,需導入matplotlib.pylab庫
1.2.1 確定數據
1.2.2 創建畫布
1.2.3 添加標題
1.2.4 添加埋雀x,y軸名稱
1.2.5 添加亮液段x,y軸范圍
1.2.6 添加x,y軸刻度
1.2.7 繪制曲線、圖例, 並保存圖片
保存圖片時,dpi為清晰度,數值越高越清晰。請注意,函數結尾處,必須加plt.show(),不然圖像不敬譽顯示。
繪制流程與繪制不含子圖的圖像一致,只需注意一點:創建畫布。
合理調整figsize、dpi,可避免出現第一幅圖橫軸名稱與第二幅圖標題相互遮蓋的現象.
2.2.1 rc參數類型
2.2.2 方法1:使用rcParams設置
2.2.3 方法2:plot內設置
2.2.4 方法3:plot內簡化設置
方法2中,線條形狀,linestyle可簡寫為ls;線條寬度,linewidth可簡寫為lw;線條顏色,color可簡寫為c,等等。
Ⅷ python中plot怎麼設置橫縱坐標名稱
用plot畫二維圖像時,默認情況下的橫坐標和縱坐標顯示的值有時達不到自己的需求,需要藉助xticks()和yticks()分別對橫坐標x-axis和縱坐標y-axis進行設置。
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.show()
此時的x軸和y軸都是只顯示偶數,其它的奇數未顯示,這樣在展示實驗效果或放入文章中都會影響其可讀性。
為了設置坐標軸的值,增加其可讀性,有多種方法。這里介紹的是matplotlib的函數xticks()和yticks()。
(8)python畫圖橫軸縱軸等比例擴展閱讀
基本用法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成x軸上的數據:從-3到3,總共有50個點
x = np.linspace(-1, 1, 50)
# 定義一個線性方程
y1 = 2 * x + 1
# 定義一個二次方程
y2 = x ** 2
# 設置x軸的取值范圍為:-1到2
plt.xlim(-1, 2)
# 設置y軸的取值范圍為:-1到3
plt.ylim(-1, 3)
# 設置x軸的文本,用於描述x軸代表的是什麼
plt.xlabel("I am x")
# 設置y軸的文本,用於描述y軸代表的是什麼
plt.ylabel("I am y")
plt.plot(x, y2)
# 繪制紅色的線寬為1虛線的線條
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
# 顯示圖表
plt.show()
Ⅸ 怎麼用python繪圖
你可以使用numpy和matplotlab這兩個庫來實現的你功能。
你的圖可以參考:
http://matplotlib.org/examples/pylab_examples/histogram_percent_demo.html
importmatplotlib
fromnumpy.randomimportrandn
importmatplotlib.pyplotasplt
frommatplotlib.tickerimportFuncFormatter
defto_percent(y,position):
#Ignorethepassedinposition.
#ticklocations.
s=str(100*y)
#
ifmatplotlib.rcParams['text.usetex']==True:
returns+r'$\%$'
else:
returns+'%'
x=randn(5000)
#Makeanormedhistogram.It'llbemultipliedby100later.
plt.hist(x,bins=50,normed=True)
#_percent.Thismultipliesallthe
#defaultlabelsby100,makingthemallpercentages
formatter=FuncFormatter(to_percent)
#Settheformatter
plt.gca().yaxis.set_major_formatter(formatter)
plt.show()
最主要的就是x軸和y軸的處理,我按照對數算了一下你提供的數據,好像和這個圖效果不一樣。
如果解決了您的問題請採納!
如果未解決請繼續追問