python能畫的圖種類非常多,而且看上去都很好看,具體種類部分可參看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html#matplotlib.pyplot.figure
這里主要是探索下散點圖繪制。
1. 首先是導入包,創建數據
import matplotlib.pyplot as plt import numpy as np n = 10 x = np.random.rand(n) * 2 # 隨機產生10個0~2之間的x坐標 y = np.random.rand(n) * 2 # 隨機產生10個0~2之間的y坐標
2. 創建一張figure
fig = plt.figure(1)
3. 設置顏色 color 值【可選參數,即可填可不填】,方式有幾種
#colors = np.random.rand(n) # 隨機產生10個0~1之間的顏色值,或者 colors = ['r', 'g', 'y', 'b', 'r', 'c', 'g', 'b', 'k', 'm'] # 可設置隨機數取
4. 設置點的面積大小 area 值 【可選參數】
area = 20*np.arange(1,n+1)
5. 設置點的邊界線寬度 【可選參數】
widths = np.arange(n) #0-9的數字
6. 正式繪制散點圖:scatter
plt.scatter(x, y, s=area, c=colors, linewidths=widths, alpha=0.5, marker='o')
其參數主要有:
def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, **kwargs): """ A scatter plot of *y* vs *x* with varying marker size and/or color. Parameters ---------- x, y : array_like, shape (n, ) The data positions. s : scalar or array_like, shape (n, ), optional The marker size in points**2. Default is ``rcParams['lines.markersize'] ** 2``. c : color, sequence, or sequence of color, optional, default: 'b' The marker color. Possible values: - A single color format string. - A sequence of color specifications of length n. - A sequence of n numbers to be mapped to colors using *cmap* and *norm*. - A 2-D array in which the rows are RGB or RGBA. Note that *c* should not be a single numeric RGB or RGBA sequence because that is indistinguishable from an array of values to be colormapped. If you want to specify the same RGB or RGBA value for all points, use a 2-D array with a single row. marker : `~matplotlib.markers.MarkerStyle`, optional, default: 'o' The marker style. *marker* can be either an instance of the class or the text shorthand for a particular marker. See `~matplotlib.markers` for more information marker styles. cmap : `~matplotlib.colors.Colormap`, optional, default: None A `.Colormap` instance or registered colormap name. *cmap* is only used if *c* is an array of floats. If ``None``, defaults to rc ``image.cmap``. alpha : scalar, optional, default: None The alpha blending value, between 0 (transparent) and 1 (opaque). linewidths : scalar or array_like, optional, default: None The linewidth of the marker edges. Note: The default *edgecolors* is 'face'. You may want to change this as well. If *None*, defaults to rcParams ``lines.linewidth``.
7. 設置軸標簽:xlabel、ylabel
#設置X軸標簽 plt.xlabel('X坐標') #設置Y軸標簽 plt.ylabel('Y坐標')
8. 設置圖標題:title
plt.title('test繪圖函數')
9. 設置軸的上下限顯示值:xlim、ylim
# 設置橫軸的上下限值 plt.xlim(-0.5, 2.5) # 設置縱軸的上下限值 plt.ylim(-0.5, 2.5)
10. 設置軸的刻度值:xticks、yticks
# 設置橫軸精准刻度 plt.xticks(np.arange(np.min(x)-0.2, np.max(x)+0.2, step=0.3)) # 設置縱軸精准刻度 plt.yticks(np.arange(np.min(y)-0.2, np.max(y)+0.2, step=0.3))
也可按照xlim和ylim來設置
# 設置橫軸精准刻度 plt.xticks(np.arange(-0.5, 2.5, step=0.5)) # 設置縱軸精准刻度 plt.yticks(np.arange(-0.5, 2.5, step=0.5))
11. 在圖中某些點上(位置)顯示標簽:annotate
#plt.annotate("(" + str(round(x[2],2)) +", "+ str(round(y[2],2)) +")", xy=(x[2], y[2]), fontsize=10, xycoords='data') #或者 plt.annotate("({0},{1})".format(round(x[2],2), round(y[2],2)), xy=(x[2], y[2]), fontsize=10, xycoords='data') # xycoords='data' 以data值為基准 # 設置字體大小為 10
12. 在圖中某些位置顯示文本:text
plt.text(round(x[6],2), round(y[6],2), "good point", fontdict={'size': 10, 'color': 'red'}) # fontdict設置文本字體 # Add text to the axes.
13. 設置顯示中文
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
14. 設置legend,【注意,'繪圖測試’:一定要是可迭代格式,例如元組或者列表,要不然只會顯示第一個字符,也就是legend會顯示不全】
plt.legend(['繪圖測試'], loc=2, fontsize = 10) # plt.legend(['繪圖測試'], loc='upper left', markerscale = 0.5, fontsize = 10) #這個也可 # markerscale:The relative size of legend markers compared with the originally drawn ones.
其參數loc對應為:
15. 保存圖片 savefig
plt.savefig('test_xx.png', dpi=200, bbox_inches='tight', transparent=False) # dpi: The resolution in dots per inch,設置分辨率,用於改變清晰度 # If *True*, the axes patches will all be transparent
16. 顯示圖片 show
plt.show()
結果如下:
##
參考:
https://blog.csdn.net/u014636245/article/details/82799573
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html#matplotlib.pyplot.figure
https://www.jianshu.com/p/78ba36dddad8
https://blog.csdn.net/u010852680/article/details/77770097
https://blog.csdn.net/u013634684/article/details/49646311