導航:首頁 > 編程語言 > python在圖的正中心畫個差

python在圖的正中心畫個差

發布時間:2022-11-21 04:04:05

python繪圖之(1)Turtle庫詳解

Turtle庫是Python語言中一個很流行的繪制圖像的函數庫,想像一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,它根據一組函數指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪制了圖形。

畫布就是turtle為我們展開用於繪圖區域,我們可以設置它的大小和初始位置。

設置畫布大小

turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數分別為畫布的寬(單位像素), 高, 背景顏色。

如:turtle.screensize(800,600, "green")

turtle.screensize() #返回默認大小(400, 300)

turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數:width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示占據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位於屏幕中心。

如:turtle.setup(width=0.6,height=0.6)

turtle.setup(width=800,height=800, startx=100, starty=100)

2.1 畫筆的狀態

在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一隻面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。

2.2 畫筆的屬性

畫筆(畫筆的屬性,顏色、畫線的寬度等)

1) turtle.pensize():設置畫筆的寬度;

2) turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字元串如"green", "red",也可以是RGB 3元組。

3) turtle.speed(speed):設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。

2.3 繪圖命令

操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。

(1) 畫筆運動命令


(2) 畫筆控制命令


(3) 全局控制命令


(4) 其他命令


3. 命令詳解

3.1 turtle.circle(radius, extent=None, steps=None)

描述:以給定半徑畫圓

參數:

radius(半徑):半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓;

extent(弧度) (optional);

steps (optional) (做半徑為radius的圓的內切正多邊形,多邊形邊數為steps)。

舉例:

circle(50) # 整圓;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圓


實例:

1、太陽花

2、五角星

3、時鍾程序

㈡ 總結用python繪制正多邊形的規律

如果能夠找到規律,可以讓代碼變得更簡單。上述代碼中其實就是調用circle()函數四次,每次傳入參數不同而已。
我們可以加入循環,循環就是重復不停地做相同的事情;再找到循環變數和畫圓參數之間的規律即可。

第一個圓的半徑為50,每次按15的節奏遞減,直到繪制完半徑為5的圓。這樣就可以使用range()函數,傳入如下參數:range(50,0,-15)。
或者由小到大繪制,傳入這樣的參數也可以:range(5,51,15)。
還可以這樣:循環四次,循環變數i依次為0、1、2、3,再在繪制圓的過程中構造遞減的表達式:100/2-i*15。

分析這個表達式,當i等於0時,結果為50,繪制半徑為50的圓;當i等於1時,結果為35,繪制半徑為35的圓……正好符合題目要求的參數值。
【擴展】思考如何繪制以坐標原點為中心的同心圓呢?

仔細觀察畫筆繪制圓的軌跡,可發現:默認小海龜從坐標原點出發,逆時針旋轉一圈畫圓;然後,再回到起始點。
所以,繪制同心圓。我們需要將畫筆向下移動一定的距離,即改變y的坐標,x坐標保持不變為0。參考代碼如下:

循環體內,每次需要抬筆和落筆功能。
02
案例二:繪制一個正多邊形

繪制正多邊形有這樣一個結論:用360°去除以繪制的邊數,即可得到旋轉角度。
比如:正三角形的旋轉角度(360/3=120°)、正四邊形的旋轉角度(360/4=90°)、正八邊形的旋轉角度(360/8=45°)。其他以此類推。
那麼,我們要繪制一個正八邊形呢?

使用循環結構,循環八次。每次前移一定距離,再旋轉(360/邊數)的角度,這里旋轉的就是45°角。參考代碼如下:

有了這樣的結論,其他的正多邊形都可以信手拈來,小菜一碟了。只需要稍微改幾個參數即可。
03
案例三:繪制由多種顏色組成的正螺旋線

比如,這樣的圖形:

這是由八種顏色組成的正八邊形螺旋線結構圖,顏色依次為:紅(red)、綠(green)、藍(blue)、黃(yellow)、紫(purple)、橙(orange)、黑(black)、粉(pink)等八種。
繪制思路:
首先,需要創建一個顏色列表list,含有八種顏色元素。
第二,前移一定距離,這個距離值是由小到大逐級遞增的過程。
第三,旋轉一定角度,可參照案例二的結論。
最後,考慮畫筆的顏色,每8次(邊數)為一個周期循環顏色列表。
參考代碼如下:

其他的正螺旋線,也是如此規律。
【擴展】如果是有一定旋轉角度的螺旋線呢?比如,這樣的圖形:

解題思路:只需要在正螺旋線的基礎上,讓旋轉角度多偏移1-2°即可。修改上述案例中最後一行的代碼:

㈢ 如何使用Python繪制餅圖

我們在運用Python製作各種圖形的時候,經常需要繪制餅圖。那麼如何用Python繪制餅圖呢?下面我給大家分享演示一下。

工具/材料

Pycharm

首先我們需要在Excel文件中准備好餅圖的數據,如下圖所示

接下來我們打開Pycharm,新建Python文件,導入Python的pandas庫,利用pandas將Excel數據載入到緩存中,如下圖所示

然後我們在導入pyplot庫,運用pyplot庫的pie進行餅圖的繪制,如下圖所示

接著運行程序以後我們就可以看到一張如下圖所示的餅圖了,但是四周的名稱和Excel中的還是不太一樣,接下來修改四周的名稱

我們在運用pandas庫載入Excel數據文件的時候加上index_col屬性即可,如下圖所示

這次在運行程序我們就可以看到餅圖四周的名稱和Excel中的一樣了,如下圖所示

接著我們在運用pyplot中的title和ylable設置餅圖的標題和Y坐標軸的名稱,如下圖所示

最後運行文件就可以看到下面這個信息比較齊全的餅圖了,如下圖所示,到這里用Python繪制餅圖就結束了

㈣ 如何使用python在一張圖片上畫橫線和豎線,線條之間相隔10個像素請提供詳細代碼謝謝!!

#-*-coding:utf-8-*-

__author__='lpe234'
__date__='2015-1-14'

fromPILimportImage
importImageDraw

#打開圖像
img=Image.open('i.jpg')
img_d=ImageDraw.Draw(img)
#獲取圖片的x軸,y軸像素
x_len,y_len=img.size
forxinrange(0,x_len,10):
img_d.line(((x,0),(x,y_len)),(0,0,0))
foryinrange(0,y_len,10):
img_d.line(((0,y),(x_len,y)),(0,0,0))
#保存圖片
img.save('ii.jpg')

㈤ 用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畫正餘弦函數圖像

用python怎樣畫出如題所示的正餘弦函數圖像? 如此編寫代碼,使其中兩個軸、圖例、刻度,大小,LaTex公式等要素與原圖一致,需要用到的代碼如下,沒有縮進:


#-*-codeing:utf-8;-*-

from matplotlib import pyplot as plt

import numpy as np

a=np.linspace(0,360,980)

b=np.sin(a/180*np.pi)

c=np.cos(a/180*np.pi)

fig = plt.figure()

ax = fig.add_subplot(111)

ax.set_xlim([0, 360])

ax.plot(a,b,label=r"$y=sin( heta)$")

ax.plot(a,c,label=r"$y=cos( heta)$")

ax.grid(True)

ax.set_ylabel(r"$y$")

ax.set_xlabel(r"$ heta$")

plt.xticks(np.arange(0,360+1,45))

plt.title("Sine & Cosine Waves")

plt.legend()

plt.savefig("SinCosWaveDegFont.jpg")

plt.show()


代碼輸出的文件的圖

㈦ 怎樣用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繪制簡單條形圖

如何用python繪制簡單條形圖呢?這里離不開matplotlib的使用。
條形圖是數據可視化圖形中很基礎也很常用的一種圖,簡單解釋下:條形圖也叫長條圖(英語:bar chart),亦稱條圖(英語:bar graph)、條狀圖、棒形圖、柱狀圖、條形圖表,是一種以長方形的長度為變數的統計圖表。長條圖用來比較兩個或以上的價值(不同時間或者不同條件),只有一個變數,通常利用於較小的數據集分析。長條圖亦可橫向排列,或用多維方式表達。
那麼一個普通的條形圖是長什麼樣子的呢?
當!當!當!就是下圖的這個樣子:
圖先亮出來啦,接下來研究這個圖是怎麼畫的吧,先看一下原數據長什麼樣子:
實際畫圖的流程和畫折線圖很相近,只是用到的畫圖函數不一樣,繪制條形圖的函數plt.bar():
由於這只是最簡單的一個條形圖,實際上條形圖的函數plt.bar()還有不少可以探索的參數設置,和對折線圖函數plt.plot()的探索差不多,有興趣的孩子可以自己去進行探索哦。
按照條形長短進行排序展示的條形圖
當然也可以有其他的設置,比如說上圖中的線條高低參差不齊,這是因為x軸的數據是按照學校名稱進行排序的,那麼可不可以按照分數的高低進行排序呢?也就是讓所有的長方形按照從高到矮或者從矮到高的順序進行排列?
當然可以啦!這里需要強調的是,條的高低排列等信息都是來源於原數據的,要想讓條形的順序發生改變,需要對畫圖的來源數據進行更改呢!
把原數據逆序排序後截取前十名數據賦值給data_yuwen,作為新的數據源傳入畫圖函數plt.bar(),畫出來的圖自然就不一樣了。
先看一眼數據長什麼樣子:
根據這個數據源繪制出的圖形如下,由於用來畫圖的數據進行了降序排序操作,所以生成條形圖的條也會進行降序排序展示:
很多時候,我們常見的條形圖還有另一種展現形式,那就是橫向的條形圖,比較火的那種動態條形圖絕大多數也都是橫向的條形圖,那麼橫向的條形圖如何繪制呢?
理解plt.bar()主要參數
其實也不難,只要清楚plt.bar()函數中主要參數的作用就可以了!條形圖函數中有五個主要參數,分別是x,height,width,bottom,orientation。其中x控制的是每個條在x軸上位置,height控制的是每個條的長度,width控制的是每個條的寬度,bottom控制的是每個條在y軸方向的起始位置,orientation控制的是條形的方向,是縱向還是橫向,默認是縱向的。
通過一個小例子理解下這幾個參數的作用:
上邊的幾行代碼輸出的圖形如下:
對比著代碼和實際輸出的條形圖,各個主要參數的作用是不是一目瞭然啦?
橫向條形圖
理解了這幾個參數作用後,縱向的條形圖轉換成橫向的條形圖就沒什麼難度了!
需要設置所有條形在x軸的位置都為0,也就全部從最左側開始畫條形;由於是橫向條形圖,所以實際上條的寬度顯示的是數據大小,將width參數設置成原數據中的語文成績;bottom控制每個條在y軸方向的起始位置,設置bottom=range(10)設置每個條形在y軸的起始位置各不相同避免有條形重疊;height控制的是每個條在y軸方向上的長度,條形圖橫向設置後,在y軸上的長度失去了衡量數據的意義,所以直接設置一個常數即可;最後設置條形的方向為橫向,即orientation=「horizontal」。
溫馨提示:數據和標簽一定要匹配,即plt.bar()重點的數據要和plt.yticks()中提取出來的標簽一一對應,一旦不匹配,整個圖展現的結果就是一個錯誤的結果!
上述代碼生成的條形圖如下:
感覺上邊這種生成橫向條形圖的方式有點點繞,和人們的習慣認知有點不大一樣,難道畫一個橫向條形圖就非得轉變自己的習慣認知這么反人類嗎?
當然不是的,實際上有更簡單的方法繪制一個橫向條形圖,之所以沒有一開始就直接用這種簡單的方法,也是為了讓大家體會下條形圖參數的靈活設置而已,而且如果比較繞的方法都能理解了,簡單的方法理解和運用起來就更沒有難度了啊!
不賣關子了,我們來認識下和plt.bar()函數類似的plt.barh()函數。
plt.barh()函數是專門繪制水平條形圖的函數,主要的參數有:
y 控制y軸顯示的標簽來源width 控制橫向條形的長度,即用來進行對比的數據源height 條形的寬度需要設置的參數主要就是這三個,比用plt.bar()函數繪制水平條形圖簡單了很多,具體代碼如下:
效果圖:
和用plt.bar()函數繪制的橫向條形圖一毛一樣對不對?以後有需求繪制橫向條形圖,盡量用plt.barh()函數吧,畢竟它是專門繪制這種類型圖的,簡單好用。
然而實際工作中對於條形圖的需求不只是這些,比如例子中只是對各個學校語文成績的展示,有時候需要各個學科的成績同時展現在一幅條形圖中,有時候也需要繪制堆積條形圖對各學科的成績以及總成績進行展示,這些圖又該如何繪制呢?其實只要理解了各個參數的含義,繪制這些圖也不在話下,至於具體怎麼畫,且看下回分解啊!

㈨ Python畫圖:在同一張圖上畫兩次,怎樣執行

用subplot(m,n,p)或者subplot(mnp)在你的這個情況中p=4,也就是總共4張圖;m是你想要的行數,n是你想要的列數。例如你要把四個圖擺成「田」,那就是subplot(2,2,1);plot(x1,y1);subplot(2,2,2);plot(y2,x2);subplot(2,2,3);plot(y3,x3);subplot(2,2,4);plot(y4,x4);或者你想把四張圖擺成一列,那就是subplot(4,1,1);plot(x1,y1);subplot(4,1,2);plot(y2,x2);subplot(4,1,3);plot(y3,x3);subplot(4,1,4);plot(y4,x4);

閱讀全文

與python在圖的正中心畫個差相關的資料

熱點內容
下班之後的程序員 瀏覽:69
檢測支持ssl加密演算法 瀏覽:340
衢州發布新聞什麼APP 瀏覽:82
中國移動長沙dns伺服器地址 瀏覽:249
wifi密碼加密了怎麼破解嗎 瀏覽:596
linux命令cpu使用率 瀏覽:67
linux實用命令 瀏覽:238
傳奇引擎修改在線時間命令 瀏覽:109
php取域名中間 瀏覽:897
cad命令欄太小 瀏覽:830
php開發環境搭建eclipse 瀏覽:480
qt文件夾名稱大全 瀏覽:212
金山雲伺服器架構 瀏覽:230
安卓系統筆記本怎麼切換系統 瀏覽:618
u盤加密快2個小時還沒有搞完 瀏覽:93
小米有品商家版app叫什麼 瀏覽:94
行命令調用 瀏覽:436
菜鳥裹裹員用什麼app 瀏覽:273
窮查理寶典pdf下載 瀏覽:514
csgo您已被禁用此伺服器怎麼辦 瀏覽:398