① 如何用python畫各種著名數學圖案
如何用Python畫各種著名數學圖案 | 附圖+代碼
用Python繪制著名的數學圖片或動畫,展示數學中的演算法魅力。
Mandelbrot 集
'''
A fast Mandelbrot set wallpaper renderer
reddit discussion:
'''
importnumpy asnp
fromPILimportImage
fromnumba importjit
MAXITERS=200
RADIUS=100
@jit
defcolor(z, i):
v =np.log2(i +1-np.log2(np.log2(abs(z)))) /5
ifv <1.0:
returnv**4, v**2.5, v
else:
v =max(0, 2-v)
returnv, v**1.5, v**3
@jit
defiterate(c):
z =0j
fori inrange(MAXITERS):
ifz.real*z.real +z.imag*z.imag >RADIUS:
returncolor(z, i)
z =z*z +c
return0, 0,0
defmain(xmin, xmax, ymin, ymax, width, height):
x =np.linspace(xmin, xmax, width)
y =np.linspace(ymax, ymin, height)
z =x[None, :] +y[:, None]*1j
red, green, blue =np.asarray(np.frompyfunc(iterate, 1, 3)(z)).astype(np.float)
img =np.dstack((red, green, blue))
Image.fromarray(np.uint8(img*255)).save('mandelbrot.png')
if__name__=='__main__':
main(-2.1, 0.8, -1.16, 1.16, 1200, 960)
② python pyplot 怎麼畫多變數圖
任何畫圖軟體也只能做到3變數,不存在什麼多變數的圖,3維圖可以
fron mpl_toolkits import AXES3
進行導入
③ python pylab怎麼輸出矢量圖
一提到python繪圖,matplotlib是不得不提的python最著名的繪圖庫,它裡麵包含了類似matlab的一整套繪圖的API。因此,作為想要學習python繪圖的童鞋們就得在自己的python環境中安裝matplotlib庫了,安裝方式這里就不多講,方法有很多,給個參考的。
本文將在已安裝matplotlib的環境中教新手如何快速使用其中的介面進行繪圖操作,並展現一個非常直觀的繪圖例子,以及控制繪圖中的一些細節的方法。
既然繪圖要用matplotlib的包,並且我們也已經安裝了,那麼首先肯定是要引入這個包了: import matplotlib.pyplot as plt
當然也可以替換為引入pylab(是matplotlib的一個子包,非常適合於進行互動式繪圖,本文將以這個為例): import pylab as pl
接下來,就是對具體數據進行繪圖了。比如我們要繪制一條y=x^2的曲線,可這樣寫代碼:
x = range(10) # 橫軸的數據
y = [i*i for i in x] # 縱軸的數據
pl.plot(x, y) # 調用pylab的plot函數繪制曲線
pl.show() # 顯示繪制出的圖
執行之後就可以看到繪制出來的圖了:
可以看到,要顯示一個圖非常簡單,只要有了兩個list作為輸入數據,先後調用plot和show函數就可以了。一定要記得只有調用了show之後才會顯示出來!只有plot是不行的!
在實際運用中,可能這樣一條簡單粗暴的線可能並不是我們想要的最好的結果,比如,想要在圖形上顯示原始數據點,很簡單,只要在plot函數中加上一個參數即可: pl.plot(x, y, 'ob-') # 顯示數據點,並用藍色(blue)實現繪制該圖形
這個參數用法比較靈活,可以從下面的值中組合選擇:
顏色(color 簡寫為 c):
藍色: 'b' (blue)
綠色: 'g' (green)
紅色: 'r' (red)
藍綠色(墨綠色): 'c' (cyan)
紅紫色(洋紅): 'm' (magenta)
黃色: 'y' (yellow)
黑色: 'k' (black)
白色: 'w' (white)
線型(linestyle 簡寫為 ls):
實線: '-'
虛線: '--'
虛點線: '-.'
點線: ':'
點: '.'
點型(標記marker):
像素: ','
圓形: 'o'
上三角: '^'
下三角: 'v'
左三角: '<'
右三角: '>'
方形: 's'
加號: '+'
叉形: 'x'
棱形: 'D'
細棱形: 'd'
三腳架朝下: '1'(像'丫')
三腳架朝上: '2'
三腳架朝左: '3'
三腳架朝右: '4'
六角形: 'h'
旋轉六角形: 'H'
五角形: 'p'
垂直線: '|'
水平線: '_'
線是調好了,可是還想加上橫縱坐標的說明呢?也很簡單,在調用show函數之前添加如下代碼:
pl.xlabel(u"我是橫軸")
pl.ylabel(u"我是縱軸")
效果如下:
這里一定要記住,傳遞的字元串一定要是Unicode編碼,如果是直接傳入字元串,形式如 u'這里是要寫的字元串' 即可。
現在就直觀多了吧,終於像一個正常的圖了,不過,還想再在圖里加個圖例該咋辦?也不難,繼續給plot傳參數:
pl.plot(x, y, 'ob-', label=u'y=x^2曲線圖') # 加上label參數添加圖例
pl.legend() # 讓圖例生效
這里也是一樣,label字元串參數務必加上u''聲明為unicode編碼,否則圖例將會添加失敗。效果圖如下:
oh,看到圖像上面光禿禿的,就好想給它加個標題: pl.title(u'圖像標題') # 字元串也需要是unicode編碼
有時候,我們的數據可能分布並沒有這么集中,比如我們想要對項目中的某些數據進行繪圖觀察時發現,大量數據聚集在0附近,而少量很大的數據會導致圖像顯示效果很不好,比如:
x = range(10)+[100]
y = [i*i for i in x]
pl.plot(x, y, 'ob-', label=u'y=x^2曲線圖')
這時,我們想要限制需要顯示的坐標范圍:
pl.xlim(-1, 11) # 限定橫軸的范圍
pl.ylim(-1, 110) # 限定縱軸的范圍
再上效果圖:
好了,到這里plot的常用繪圖用法就講完了,另外,如果需要在一幅圖中顯示多條線,可以在show函數調用前繼續調用plot函數,傳入需要繪制的數據和圖形顯示要求。
matplotlib是個非常好用的庫,不管是對於需要寫論文畫圖,還是數據調研中看數據相關性,都是一個得力助手。寫這篇文章的背景是我之前在項目中也使用這個做了一個特徵與結果之間的相關性調研中使用到了繪圖,就學習了一下,下面是對真實數據進行屏蔽改寫之後的一個很像的示意圖(感興趣的可以到我github中看源碼,本文的完整代碼及注釋也可在本鏈接只中找到):
④ Python的圖是矢量圖嗎
python的圖可以轉成矢量圖。
python將圖片轉為矢量圖的方法步驟
2021-03-30 09:57:10 作者:東方佑
這篇文章主要介紹了python將圖片轉為矢量圖的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
本文主要介紹了python圖片轉為矢量圖,分享給大家,具體如下:
import numpy as np
import matplotlib.pyplot as plt
import cv2
fig, ax = plt.subplots()
plt.figure(1)
image=cv2.imread("2.jpg")
# you can specify the marker size two ways directly:
# 這樣一個一個像素太慢了故而要將同樣顏色的坐標進行分類處理
color_class=[]
x_y=dict()
for x,w in enumerate(image):
for y,colors in enumerate(w):
if colors.tolist() not in color_class:
s=image[:, :, :1] == colors[0]
s1=image[:, :, 1:2] == colors[1]
s2=image[:, :, 2:3] == colors[2]
ss=s*s1*s2
color_class.append(colors.tolist())
x_y[len(color_class)]=np.where(ss.reshape((ss.shape[0],ss.shape[1])))
print(x,y)
for i ,colors in enumerate(color_class):
a, b = x_y[i + 1]
plt.plot(a,b, ".",color=[colors[2]/255,colors[1]/255,colors[0]/255], markersize=1, label='a') # blue circle with size 20
fig.savefig('scatter.svg', dpi=200, format='svg')
if __name__ == '__main__':
pass
⑤ python 畫圖,有一個N*N的格子,每一個格子對應著一個數值,根據數值將不同格子繪制不同的顏色,怎麼做
fromTkinterimport*
defdrawboard(board,colors,startx=50,starty=50,cellwidth=50):
width=2*startx+len(board)*cellwidth
height=2*starty+len(board)*cellwidth
canvas.config(width=width,height=height)
foriinrange(len(board)):
forjinrange(len(board)):
index=board[i][j]
color=colors[index]
cellx=startx+i*50
celly=starty+j*50
canvas.create_rectangle(cellx,celly,cellx+cellwidth,celly+cellwidth,
fill=color,outline="black")
canvas.update()
root=Tk()
canvas=Canvas(root,bg="white")
canvas.pack()
board=[[1,2,0],[0,2,1],[0,1,2]]
colors=['red','orange','yellow','green','cyan','blue','pink']
drawboard(board,colors)
root.mainloop()
colors必須有不小於最大數值的顏色數
⑥ python可以畫出哪些簡單圖形
一、畫一朵花+簽名
代碼如下:
# -*- coding:utf-8 -*-
#畫一朵花+簽名
import turtle
turtle.color('red','green')
turtle.pensize(5)
turtle.goto(0,0)
turtle.speed(10)
for i in range(15):
turtle.forward(100)
turtle.right(150)
turtle.up()
turtle.goto(150,-120)
turtle.color('black')
turtle.write("xxx" )
turtle.up()
turtle.goto(160,-140)
turtle.color('black')
turtle.write("2018 年 1 月 10 日" )
turtle.up()
turtle.goto(240,-160)
turtle.color('black')
turtle.write("." )
turtle.done()
二、畫五角星臉+簽名
代碼如下:
# -*- coding:utf-8 -*-
#畫五角星臉+簽名
import turtle
turtle.color('red','green')
turtle.pensize(5)
turtle.forward(100)
turtle.right(144)
turtle.forward(100)
turtle.right(144)
turtle.forward(100)
turtle.right(144)
turtle.forward(100)
turtle.right(144)
turtle.forward(100)
turtle.right(144)
turtle.forward(100)
turtle.up()
turtle.goto(150,120)
turtle.down()
turtle.color('red','green')
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.up()
turtle.goto(-80,90)
turtle.down()
turtle.color('red','green')
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.right(144)
turtle.forward(50)
turtle.up()
turtle.goto(150,-120)
turtle.color('black')
turtle.write("xxx" )
turtle.up()
turtle.goto(160,-140)
turtle.color('black')
turtle.write("2018 年 1 月 7 日" )
turtle.up()
turtle.goto(240,-160)
turtle.color('black')
turtle.write("." )
turtle.done()
⑦ 如何用Python畫出下面這種效果的圖
mplot3d tutorial
這個?
Quiver
Axes3D.quiver(*args, **kwargs)
Plot a 3D field of arrows.
⑧ python畫圖如何將數值標到圖形上
假設有9張圖, 化成3行3列
plt.subplot(331)
plt.plot(...)
plt.subplot(332)
plt.plot(...)
...
plt.subplot(339)
plt.plot(...)
⑨ python的pillow用ImageDraw.Draw.polygon如何填充半透明的顏色
>> fill = (200, 10, 10, 0.5)
對於RGBA模式的圖片,填充半透明色,alpha位置取值是0-255,你希望50%,應該是用128,不是0。5
>> 我這里畫了一個比如三角形,准備再畫一個三角形,也是半透明的,那麼這兩個顏色是可以混合起來的吧?
直接在同一個Image上繪圖是不行的。後面畫的會直接覆蓋前面的,顏色不會自動融合。如果想要融合的效果,需要用Image.blend(im1, im2, 0.5)或者Image.composite(im1, im2, mask)其中mask需要帶alpha參數,可以設置為128.
#!/usr/bin/envpython2
#coding=utf-8
"""
.
"""
fromPILimportImage,ImageDraw
defmain():
im=Image.new("RGBA",(800,800))
draw=ImageDraw.Draw(im)
draw.rectangle((0,0,200,200),fill=(255,0,0,128))
draw.rectangle((400,400,600,600),fill=(255,0,0))
im2=Image.new("RGBA",(800,800))
draw2=ImageDraw.Draw(im2)
draw2.rectangle((100,100,300,300),fill=(0,255,0,128))
draw2.rectangle((500,500,700,700),fill=(0,255,0))
#mergetwoimagesusingblend
blend=Image.blend(im,im2,0.5)
#drawf=ImageDraw.Draw(blend)
#drawf.rectangle((500,100,600,200),fill=(255,0,0))
#drawf.rectangle((600,200,700,300),fill=(0,255,0))
blend.save("/home/sylecn/d/blend.png")
#mergetwoimagesusingcomposite
ones=Image.new("RGBA",(800,800))
_draw=ImageDraw.Draw(ones)
_draw.rectangle((0,0,800,800),fill=(255,255,255,128))
final=Image.composite(im,im2,ones)
final.save("/home/sylecn/d/composite.png")
if__name__=='__main__':
main()
⑩ python matlibplot 怎樣畫圖例
用於添加圖例的函數是plt.legend(),我們通過例子來對其進行介紹。
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
#多數據並列柱狀圖
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x = np.arange(6)
y1 = [23,5,14,27,18,14]
y2 = [10,27,25,18,23,16]
tick_label = ["A","B","C","D","E","F"]
bar_width = 0.35
plt.bar(x,y1,bar_width,align="center",label="班級A",alpha=0.5)
plt.bar(x+bar_width,y2,bar_width,align="center",label="班級B",alpha=0.5)
plt.xlabel("成績等級")
plt.ylabel("人數")
plt.xticks(x+bar_width/2,tick_label)
plt.legend(bbox_to_anchor=(1,1),#圖例邊界框起始位置
loc="upper right",#圖例的位置
ncol=1,#列數
mode="None",#當值設置為「expend」時,圖例會水平擴展至整個坐標軸區域
borderaxespad=0,#坐標軸和圖例邊界之間的間距
title="班級",#圖例標題
shadow=False,#是否為線框添加陰影
fancybox=True)#線框圓角處理參數
plt.show()
效果如圖所示