Python的散點圖繪制 scatter


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM