Python + matplotlib(plt) 绘图要点明细整理

基础画图

坐标设置

确定坐标范围 xlim(xmin, xmax)ylim(ymin, ymax) 来调整 x , y 坐标范围

import numpy as np
import matplotlib.pyplot as plt
from pylab import *

x = np.arange(-5.0, 5.0, 0.02)
y1 = np.sin(x)

plt.figure(1)
plt.subplot(211)
plt.plot(x, y1)

plt.subplot(212)
#设置x轴范围
xlim(-2.5, 2.5)
#设置y轴范围
ylim(-1, 1)
plt.plot(x, y1)

设置坐标轴刻度

plt.xticks()plt.yticks() 可以设置坐标轴的刻度显示的值

xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

yticks([-1, 0, +1],
       [r'$-1$', r'$0$', r'$+1$'])

线点的参数设置

设置图中线与点的形状和颜色(linestyle、marker)

linestyle 有如下几个可选参数:

'-'				solid line style
'--'			dashed line style
'-.'			dash-dot line style
':'				dotted line style

marker 有如下几个可选参数:

'.'       point marker
','       pixel marker
'o'       circle marker
'v'       triangle_down marker
'^'       triangle_up marker
'<'       triangle_left marker
'>'       triangle_right marker
'1'       tri_down marker
'2'       tri_up marker
'3'       tri_left marker
'4'       tri_right marker
's'       square marker
'p'       pentagon marker
'*'       star marker
'h'       hexagon1 marker
'H'       hexagon2 marker
'+'       plus marker
'x'       x marker
'D'       diamond marker
'd'       thin_diamond marker
'|'       vline marker
'_'       hline marker

marker 示意图:
marker 示意图
color 可选参数:

cnames = {
'aliceblue':            '#F0F8FF',
'antiquewhite':         '#FAEBD7',
'aqua':                 '#00FFFF',
'aquamarine':           '#7FFFD4',
'azure':                '#F0FFFF',
'beige':                '#F5F5DC',
'bisque':               '#FFE4C4',
'black':                '#000000',
'blanchedalmond':       '#FFEBCD',
'blue':                 '#0000FF',
'blueviolet':           '#8A2BE2',
'brown':                '#A52A2A',
'burlywood':            '#DEB887',
'cadetblue':            '#5F9EA0',
'chartreuse':           '#7FFF00',
'chocolate':            '#D2691E',
'coral':                '#FF7F50',
'cornflowerblue':       '#6495ED',
'cornsilk':             '#FFF8DC',
'crimson':              '#DC143C',
'cyan':                 '#00FFFF',
'darkblue':             '#00008B',
'darkcyan':             '#008B8B',
'darkgoldenrod':        '#B8860B',
'darkgray':             '#A9A9A9',
'darkgreen':            '#006400',
'darkkhaki':            '#BDB76B',
'darkmagenta':          '#8B008B',
'darkolivegreen':       '#556B2F',
'darkorange':           '#FF8C00',
'darkorchid':           '#9932CC',
'darkred':              '#8B0000',
'darksalmon':           '#E9967A',
'darkseagreen':         '#8FBC8F',
'darkslateblue':        '#483D8B',
'darkslategray':        '#2F4F4F',
'darkturquoise':        '#00CED1',
'darkviolet':           '#9400D3',
'deeppink':             '#FF1493',
'deepskyblue':          '#00BFFF',
'dimgray':              '#696969',
'dodgerblue':           '#1E90FF',
'firebrick':            '#B22222',
'floralwhite':          '#FFFAF0',
'forestgreen':          '#228B22',
'fuchsia':              '#FF00FF',
'gainsboro':            '#DCDCDC',
'ghostwhite':           '#F8F8FF',
'gold':                 '#FFD700',
'goldenrod':            '#DAA520',
'gray':                 '#808080',
'green':                '#008000',
'greenyellow':          '#ADFF2F',
'honeydew':             '#F0FFF0',
'hotpink':              '#FF69B4',
'indianred':            '#CD5C5C',
'indigo':               '#4B0082',
'ivory':                '#FFFFF0',
'khaki':                '#F0E68C',
'lavender':             '#E6E6FA',
'lavenderblush':        '#FFF0F5',
'lawngreen':            '#7CFC00',
'lemonchiffon':         '#FFFACD',
'lightblue':            '#ADD8E6',
'lightcoral':           '#F08080',
'lightcyan':            '#E0FFFF',
'lightgoldenrodyellow': '#FAFAD2',
'lightgreen':           '#90EE90',
'lightgray':            '#D3D3D3',
'lightpink':            '#FFB6C1',
'lightsalmon':          '#FFA07A',
'lightseagreen':        '#20B2AA',
'lightskyblue':         '#87CEFA',
'lightslategray':       '#778899',
'lightsteelblue':       '#B0C4DE',
'lightyellow':          '#FFFFE0',
'lime':                 '#00FF00',
'limegreen':            '#32CD32',
'linen':                '#FAF0E6',
'magenta':              '#FF00FF',
'maroon':               '#800000',
'mediumaquamarine':     '#66CDAA',
'mediumblue':           '#0000CD',
'mediumorchid':         '#BA55D3',
'mediumpurple':         '#9370DB',
'mediumseagreen':       '#3CB371',
'mediumslateblue':      '#7B68EE',
'mediumspringgreen':    '#00FA9A',
'mediumturquoise':      '#48D1CC',
'mediumvioletred':      '#C71585',
'midnightblue':         '#191970',
'mintcream':            '#F5FFFA',
'mistyrose':            '#FFE4E1',
'moccasin':             '#FFE4B5',
'navajowhite':          '#FFDEAD',
'navy':                 '#000080',
'oldlace':              '#FDF5E6',
'olive':                '#808000',
'olivedrab':            '#6B8E23',
'orange':               '#FFA500',
'orangered':            '#FF4500',
'orchid':               '#DA70D6',
'palegoldenrod':        '#EEE8AA',
'palegreen':            '#98FB98',
'paleturquoise':        '#AFEEEE',
'palevioletred':        '#DB7093',
'papayawhip':           '#FFEFD5',
'peachpuff':            '#FFDAB9',
'peru':                 '#CD853F',
'pink':                 '#FFC0CB',
'plum':                 '#DDA0DD',
'powderblue':           '#B0E0E6',
'purple':               '#800080',
'red':                  '#FF0000',
'rosybrown':            '#BC8F8F',
'royalblue':            '#4169E1',
'saddlebrown':          '#8B4513',
'salmon':               '#FA8072',
'sandybrown':           '#FAA460',
'seagreen':             '#2E8B57',
'seashell':             '#FFF5EE',
'sienna':               '#A0522D',
'silver':               '#C0C0C0',
'skyblue':              '#87CEEB',
'slateblue':            '#6A5ACD',
'slategray':            '#708090',
'snow':                 '#FFFAFA',
'springgreen':          '#00FF7F',
'steelblue':            '#4682B4',
'tan':                  '#D2B48C',
'teal':                 '#008080',
'thistle':              '#D8BFD8',
'tomato':               '#FF6347',
'turquoise':            '#40E0D0',
'violet':               '#EE82EE',
'wheat':                '#F5DEB3',
'white':                '#FFFFFF',
'whitesmoke':           '#F5F5F5',
'yellow':               '#FFFF00',
'yellowgreen':          '#9ACD32'}

颜色示意图:
颜色示意图

文字设置

添加文字说明

plt.text() 可以在图中的任意位置添加文字,并支持 LaTex 语法
xlable()ylable 用于添加 x 轴和 y 轴标签
title() 用于添加图的题目

# 前两个参数用于设置文本出现的坐标位置
# r'$\mu=100,\ \sigma=15$' 表示文本内容,latex 语法
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')

plt.annotate() 可以添加注释

import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot(111)

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(facecolor='black', shrink=0.05),
            )

plt.ylim(-2,2)
plt.show()

annotate 示意图

图表正常显示中文

为了在图表中正常显示中文和负号等,需要如下设置代码:

import matplotlib.pyplot as plt
plt.rcParams['font.sas-serig']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

图表设置

添加图例

plt.legend() 添加图例

plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red",  linewidth=2.5, linestyle="-", label="sine")
legend(loc='upper left')

legend 示意图

设置图例的位置

图例的位置通过 plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4) 设置

bbox_to_anchor(num1,num2) 表示 legend 的位置和图像的位置关系,num1 表示水平位置,num2 表示垂直位置。
num1=0 表示 legend 位于图像的左侧垂直线(图像内,与 y 轴重合);num1=1 表示 legend 位于图像的右侧垂直线(图像外面,与右侧垂线重合);当 num1 大于 1 时, legend 位于图像的右侧垂直线(图像外面,不与右侧垂线重合),一般取 num1=1.05
num2=1 表示 legend 位于图像上侧水平线;num2=0 表示 legend 位于图像下侧水平线。

其中,loc 参数如下,可以单独使用 plt.legend(bbox_to_anchor=(loc='upper right'),也可以和其他参数一起使用 plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4)

位置StringNumber
右上upper right1
左上upper left2
左下lower left3
右下lower right4
正右right5
中央偏左center left6
中央偏右center right7
中央偏下lower center8
中央偏上upper center9
正中央center10

参数 num4 表示轴和 legend 之间的填充,以字体大小距离测量,默认值为 None,但实际操作中,如果不加该参数,效果是有一定的填充。

特殊点做注释

t = 2*np.pi/3
# 作一条垂直于x轴的线段
# 横坐标一致的两个点就在垂直于坐标轴的直线上了
plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
scatter([t,],[np.cos(t),], 50, color ='blue')

annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
         xy=(t, np.sin(t)), xycoords='data',
         xytext=(+10, +30), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
scatter([t,],[np.sin(t),], 50, color ='red')

annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
         xy=(t, np.cos(t)), xycoords='data',
         xytext=(-90, -50), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

特殊点注释 示意图

plt.subplot()

plt.subplot(231) 表示把图分割为 2*3 的网格,也可以是 plt.subplot(231)
其中,第一个参数表示行数,第二个参数表示列数,第三个参数表示图形的标号

图表背景色

通过向 plt.pyplot.axes() 或者 plt.pyplot.subplot() 提供一个 axisbg 参数,可以指定坐标轴的背景色

subplot(111, axisbg=(0.1843, 0.3098, 0.3098))

饼图——pie

一个例子:

import matplotlib.pyplot as plt
labels = 'frogs', 'hogs', 'dogs', 'logs'
sizes = 15, 20, 45, 10
colors = 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral'
explode = 0, 0.1, 0, 0
plt.pie(sizes, explode = explode, labels = labels, colors = colors, autopct = '%1.2f%%', shadow = True, startangle = 50)
# autopct = %1.2f%% ; 小数点后面的数字表示保留小数点几位 ; 分别设置为 %1.2f% 和%1.1f%% 结果分别如1、2图所示
plt.axis('equal')
plt.show()

图片1

图片2

pie 的参数说明:

参数说明
x(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
labels(每一块)饼图外侧显示的说明文字
explode(每一块)离开中心距离
startangle起始绘制角度;默认图是从x轴正方向逆时针画起;如设定=90则从y轴正方向画起
shadow在饼图下面画一个阴影;默认值:False,即不画阴影
labeldistancelabel标记的绘制位置,相对于半径的比例;默认值为1.1,如<1则绘制在饼图内侧
autopct控制饼图内百分比设置,可以使用format字符串或者format function; ‘%1.1f’ 指小数点前后位数(没有用空格补齐)
pctdistance类似于labeldistance,指定autopct的位置刻度,默认值为0.6
radius控制饼图半径,默认值为1
counterclock指定指针方向;布尔值,可选参数,**默认为:True,即逆时针;**将值改为False即可改为顺时针
wedgeprops字典类型,可选参数,默认值:None;参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops = { ‘linewidth’ : 3 } 设置wedge线宽为3
textprops设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None;传递给text对象的字典参数
center浮点类型的列表,可选参数,默认值:(0,0),图标中心位置
frame布尔类型,可选参数,默认值:False;如果是true,绘制带有表的轴框架
rotatelabels布尔类型,可选参数,默认为:False;如果为True,旋转每个label到指定的角度
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值