• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

python绘图 科研作图 常用函数 方法

武飞扬头像
Cherry_csc
帮助1

        总结一些python绘图方法。python绘图有一个强大的库工具:matplotlib.

导入画图工具代码:

import matplotlib.pyplot as plt

   一.散点图

  • 函数功能:散点图,寻找两个变量之间的关系
  • plt.scatter(x, y, s=20, c=None, marker=‘o’, cmap=None, norm=None, alpha=None, linewidths=None, edgecolors=None
  • 参数说明:

x: 指定散点图的x轴数据
y: 指定散点图的y轴数据
s: 指定散点图点的大小,默认为20,通过新传入的变量,实现气泡图的绘制
c: 指定散点图点的颜色,默认为蓝色
marker: 指定散点图点的形状,默认为圆形
cmap: 指定色图,只有当c参数是一个浮点型的数组时才起作用
norm: 指定数据亮度, 标准化到0~1之间,使用该参数仍需要c为浮点型的数组
vmin、vmax: 亮度设置,与norm类似,如果使用了norm则该参数无效
alpha: 设置散点的透明度
edgecolors: 设置散点边界线的颜色
linewidths: 设置散点边界线的粗细

cmap和c 

        cmap和c配合使用。

        参数c可以是一个序列,如:plt.scatter(a,b,c=['b','r','b','r','b'],s=80),则图中5个散点依次颜色为蓝、红、蓝、红、蓝。

        此时c的序列是一个颜色序列,除了上述的简洁写法,还可以使用RGB或RBGA:plt.scatter(a,b,c=['#f00','#0f0','#f00','#0f0','#f00'],s=80)

        上面的例子是将参数c设置为颜色序列,但是一般我们用来做分类的数据Y是整数0,1,2,.......,等等。此时就需要配合cmap参数来使用了。如:

  1.  
    a = np.array([1,2,3,4,5])
  2.  
    b= np.array([6,7,8,9,10])
  3.  
    c = np.array([0,1,2,3,4])
  4.  
    plt.scatter(a,b,c=c,s=80,cmap=plt.cm.Spectral)

其结果: 学新通

         在这里需要注意的是,plt.cm.Spectral是一个颜色映射集,但是,并不是说0~5各代表了某个颜色。而是说,参数c的序列中出现了5个不同的值,然后为每一个值分配一个颜色。

常见的颜色集有:

1. cmap=plt.cm.Spectral

效果示意:学新通

2.cmap=plt.cm.cool

效果示意:学新通

 3.cmap=plt.cm.spring

效果示意:学新通

 4.cmap=plt.cm.Paired

效果示意:学新通

5.cmap=plt.cm.plasma

效果示意:学新通

6.cmap=plt.cm.PuBu

效果示意:学新通

marker参数可指定值:

学新通

edgecolor

颜色字符 说明 颜色字符 说明
‘b’ 蓝色 ‘m’ 洋红色
‘g’ 绿色 ‘y’ 黄色
‘r’ 红色 ‘k’ 黑色
‘c’ 青绿色 cyan ‘w’ 白色
‘#008000’ RGB某颜色 ‘0.8’ 灰度值字符串

 二.热度图

  • plt.matshow(Mat, cmap=plt.cm.gray)

 示例:

  1.  
    Mat = np.array([[ 0.1443294 -0.24518758 -0.00205106 -0.23932041 0.14199204 0.39466085
  2.  
    0.4229343 -0.2985331 0.31342949 -0.0886167 0.29671456 0.37616741
  3.  
    0.28675223]
  4.  
    [-0.48365155 -0.22493093 -0.31606881 0.0105905 -0.299634 -0.06503951
  5.  
    0.00335981 -0.02877949 -0.03930172 -0.52999567 0.27923515 0.16449619
  6.  
    -0.36490283]])
  7.  
    plt.matshow(Mat, cmap='plasma')
  8.  
    # 纵轴为主成分数
  9.  
    plt.yticks([0, 1], ['component 1', 'component 2'])
  10.  
    plt.colorbar()
  11.  
    # 横轴为原始特征数量
  12.  
    plt.xticks(range(len(wine.feature_names)), wine.feature_names, rotation=60, ha='left')
  13.  
    plt.show()

 结果:

学新通

 三.折线图

  • plt.plot(x, y, format_string, **kwargs)

 1.x为x轴数据, y为y轴数据

  1.  
    X = [[1], [4]] # 横坐标
  2.  
    y = [3, 5] # 纵坐标
  3.  
    plt.plot(X, y, c='k')

结果:学新通

2.可传入多组x, y

  1.  
    import numpy as np
  2.  
    import pandas as pd
  3.  
    import matplotlib.pyplot as plt
  4.  
     
  5.  
    x=(3,4,5)
  6.  
    y1=np.array([3,4,3])
  7.  
    y2=pd.Series([4,5,4])
  8.  
     
  9.  
    plt.plot(x,y1,x,y2) # 此时x不可省略
  10.  
    plt.show()

 结果:学新通

 四.子图

     fig,ax = plt.subplots(nrows, ncols, figsize, sharex, sharey, squeeze, subplot_kw, gridspec_kw, fig_kw)

  • 返回值:type(fig)是matplotlib.figure.Figure,type(ax)是numpy.ndarray;

  • nrows/ncols:创建行数*列数的子图;
  • figsize:指定整个画布的大小,以元组形式输入;
  • sharex/sharey:是否共享x/y轴的属性; squeeze:默认True;
  • subplot_kw:带有关键字的字典,该关键字传递给用于创建每个子图的add_subplot调用;
  • gridspec_kw:带有关键字的字典,该关键字传递给用于创建每个子图网格的GridSpec函数;

示例:

  1.  
    # 导入数据集获取工具
  2.  
    from sklearn.datasets import fetch_lfw_people
  3.  
    # 载入人脸数据集
  4.  
    faces = fetch_lfw_people(min_faces_per_person=20, resize=0.8)
  5.  
    image_shape = faces.images[0].shape
  6.  
    # 将照片打印出来
  7.  
    fig, axes = plt.subplots(3, 4, figsize=(12, 9), subplot_kw={'xticks':(), 'yticks':()})
  8.  
    for target, image, ax in zip(faces.target, faces.images, axes.ravel()):
  9.  
    ax.imshow(image, cmap=plt.cm.gray)
  10.  
    ax.set_title(faces.target_names[target])
  11.  
    plt.show()

 subplot_kw={'xticks':(), 'yticks':()}的效果是去除子图的横纵坐标轴

结果:

学新通

使用plt.subplots函数时,可以直接在该函数内部设置子图纸信息
该函数返回两个变量,一个是Figure实例fig,另一个 AxesSubplot实例ax 。fig代表整个图像,ax代表坐标轴和画的子图,通过下标获取需要的子区域

学新通

 结果:学新通

 参考:https://zhuanlan.zhihu.com/p/523005023

五.等高线

plt.contourf ()

参数:  

 X,Y:类似数组,可选为Z中的坐标值,当 X,Y,Z 都是 2 维数组时,它们的形状必须相同。如果都是 1 维数组时,len(X)是 Z 的列数,而 len(Y) 是 Z 中的行数。(例如,经由创建numpy.meshgrid())
Z:类似矩阵绘制轮廓的高度值

levels:int或类似数组,可选,确定轮廓线/区域的数量和位置 
其他参数:    

aalpha:float ,可选
alpha混合值,介于0(透明)和1(不透明)之间。
cmap:str或colormap ,可选
Colormap用于将数据值(浮点数)从间隔转换为相应Colormap表示的RGBA颜色。用于将数据缩放到间隔中看 。

  1.  
    import numpy as np
  2.  
    import pandas as pd
  3.  
    import matplotlib.pyplot as plt
  4.  
     
  5.  
     
  6.  
    # 计算x,y坐标对应的高度值
  7.  
    def f(x, y):
  8.  
    return (1-x/2 x**3 y**5) * np.exp(-x**2-y**2)
  9.  
     
  10.  
    # 生成x,y的数据
  11.  
    n = 256
  12.  
    x = np.linspace(-3, 3, n)
  13.  
    y = np.linspace(-3, 3, n)
  14.  
     
  15.  
    # 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
  16.  
    X, Y = np.meshgrid(x, y)
  17.  
     
  18.  
    # 填充等高线
  19.  
    plt.contourf(X, Y, f(X, Y))
  20.  
    # 显示图表
  21.  
    plt.show()
学新通

 结果:学新通

六.分类图

matplotlib.pyplot.pcolormesh(*args,alpha=None, norm=None, cmap=None, vmin=None,
vmax=None, shading=None,antialiased=False,data=None, **kwargs)

  1.  
    from sklearn.neural_network import MLPClassifier
  2.  
    from sklearn.datasets import load_wine
  3.  
    from sklearn.model_selection import train_test_split
  4.  
    wine = load_wine()
  5.  
    X = wine.data[:, :2]
  6.  
    y = wine.target
  7.  
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
  8.  
    mlp = MLPClassifier(solver='lbfgs')
  9.  
    mlp.fit(X_train, y_train)
  10.  
    import matplotlib.pyplot as plt
  11.  
    from matplotlib.colors import ListedColormap
  12.  
    import numpy as np
  13.  
    # 使用不同的色块表示不同的分类
  14.  
    cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
  15.  
    cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
  16.  
    x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() 1
  17.  
    y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() 1
  18.  
    xx, yy = np.meshgrid(np.arange(x_min, x_max, .02),
  19.  
    np.arange(y_min, y_max, .02))
  20.  
    Z = mlp.predict(np.c_[xx.ravel(), yy.ravel()])
  21.  
    Z = Z.reshape(xx.shape)
  22.  
    plt.figure()
  23.  
    plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
  24.  
    plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k', s=60)
  25.  
    plt.xlim(xx.min(), xx.max())
  26.  
    plt.ylim(yy.min(), yy.max())
  27.  
    plt.title("MLPClassifier: solver:lbfgs")
  28.  
    plt.show()
学新通

 结果:学新通

七.常用函数

1.图例

plt.legend()

  1.  
    import matplotlib.pyplot as plt
  2.  
    import numpy as np
  3.  
    x = np.arange(0,10,1)
  4.  
    plt.plot(x,x,'r--',x,np.cos(x),'g--',marker='*')
  5.  
    plt.xlabel('row')
  6.  
    plt.ylabel('cow')
  7.  
    plt.legend(["BJ","SH"],loc='upper left')
  8.  
    plt.show()

结果:学新通

 2.坐标轴

xlabel、ylabel: 设置横轴、纵轴标签及大小
例如plt.xlabel("csdn test", fontsize=20)

xlim、ylim: 设置x、y坐标轴的起始点(从哪到哪)
例如plt.xlim(0,50) plt.ylim(0,60)

xticks、yticks: 设置坐标轴刻度的字体大小
例如plt.xticks(labelsize=20)

title: 设置图片的标题
例如 plt.title(“csdn test”)

3.水平/竖直线

plt.hlines水平线

plt.vlines竖直线

必须要指定xmin,xmax/ymin,ymax

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgagjhg
系列文章
更多 icon
同类精品
更多 icon
继续加载