【21】python之matplotlib库
Matplotlib是一个Python 绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。
Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。 只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等。
Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
1.简单图例绘制
axex: 设置坐标轴边界和表面的颜色、坐标刻度值大 小和网格的显示
backend: 设置目标暑促TkAgg和GTKAgg
figure: 控制dpi、边界颜色、图形大小、和子区 ( subplot)设置
font: 字体集(font family)、字体大小和样式设置
grid: 设置网格颜色和线性
legend: 设置图例和其中的文本的显示
line: 设置线条(颜色、线型、宽度等)和标记
patch: 是填充2D空间的图形对象,如多边形和圆。 控制线宽、颜色和抗锯齿设置等。
savefig: 可以对保存的图形进行单独设置。例如,设 置渲染的文件的背景为白色。
verbose: 设置matplotlib在执行期间信息输出,如 silent、helpful、debug和debug-annoying。
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、 大小、方向,以及标签大小。
xlabel与ylabel:设置坐 标轴标签。
xlim与ylim:设置坐标轴数据范围。
grid:设置网格线。
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt # x轴的采样点,生成100个元素在0-5之间的等间隔数列 x = np.linspace(0, 5, 100) # y轴 y = x # 名称 plt.figure(u'画图') # 标题 plt.title(u'测试',fontproperties='SimHei',fontsize=14) # 绘制图形 plt.plot(x, y) # 图形显示 plt.show()
效果
2.全局设置
# 设置黑体 mpl.rcParams['font.sans-serif'] = ['SimHei'] # 通过rcParams设置全局横纵轴字体大小 mpl.rcParams['xtick.labelsize'] = 12 mpl.rcParams['ytick.labelsize'] = 12
# figsize绘图对象的宽度和高度,单位为英寸,dpi绘图对象的分辨率,即每英寸多少个像素,缺省值为80
plt.figure(figsize=(8,6),dpi=100)
以上设置字体可以避免中文乱码
3.横纵轴设置
# 设置坐标轴的取值范围 plt.xlim((0, 5)) plt.ylim((0, 5)) # 横坐标名称,标签里面必须添加字体变量:fontproperties='SimHei',fontsize=14。不然可能会乱码 plt.xlabel(u'横坐标',fontproperties='SimHei',fontsize=14) # 纵坐标名称,标签里面必须添加字体变量:fontproperties='SimHei',fontsize=14。不然可能会乱码 plt.ylabel(u'纵坐标',fontproperties='SimHei',fontsize=14) # 设置x坐标轴刻度,也就是在坐标轴上取11个点,x轴的范围为0到5,所以取11个点之后刻度就变为0.5了 plt.xticks(np.linspace(0, 5, 11)) # 获取当前的坐标轴, gca = get current axis ax = plt.gca() # 设置右边框和上边框 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') # 设置x坐标轴为下边框 ax.xaxis.set_ticks_position('bottom') # 设置y坐标轴为左边框 ax.yaxis.set_ticks_position('left') # 设置x轴, y周在(0, 0)的位置 ax.spines['bottom'].set_position(('data', 0)) ax.spines['left'].set_position(('data', 0)) # 设置坐标轴label的大小,背景色等信息 for label in ax.get_xticklabels() + ax.get_yticklabels(): label.set_fontsize(12) label.set_bbox(dict(facecolor = 'green', edgecolor = 'None', alpha = 0.7))
效果
还可以自定义坐标轴刻度
import matplotlib.pyplot as plt import numpy as np import datetime from matplotlib.dates import DayLocator, DateFormatter x = [datetime.date.today() + datetime.timedelta(i) for i in range(30)] y = np.sin(np.arange(30)) plt.figure(figsize=(12,6)) plt.plot(x, y) # 设置X轴的时间间隔,MinuteLocator、HourLocator、DayLocator、WeekdayLocator、MonthLocator、YearLocator plt.gca().xaxis.set_major_locator(DayLocator(interval=3)) # 设置X轴的时间显示格式 plt.gca().xaxis.set_major_formatter(DateFormatter('%y/%m/%d')) # 自动旋转X轴的刻度,适应坐标轴 plt.gcf().autofmt_xdate() plt.show()
效果
4.图例设置
# 绘制图形 plt.plot(x, y,label=u"直线") # 添加图例 plt.legend(loc='upper left')
效果
5.注解设置
# 绘制注解二 plt.text(1, 3, r'y = x', fontdict = {'size': 16, 'color': 'red'})
效果
6.折线图
matplotlib.plot(height,width,marker,linewidth,linestyle,color)
height:横坐标数据
width:纵坐标数据
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
linewidth:线宽
linestyle:线型样式
'-' solid line style '--' dashed line style '-.' dash-dot line style ':' dotted line style
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'}
颜色对应
7.散点图绘制
x = np.random.rand(10) y = np.random.rand(10) plt.scatter(x,y) plt.show()
8.柱状图绘制
x = np.arange(10) y = np.random.randint(0,30,10) plt.bar(x, y) plt.show()
9.饼图
x = np.random.randint(1, 10, 3) plt.pie(x) plt.show()
10.直方图
mean, sigma = 0, 1 x = mean + sigma * np.random.randn(10000) plt.hist(x,50) plt.show()
11.子图
subplot(numRows, numCols, plotNum)
一个Figure对象可以包含多个子图Axes,subplot将整个绘图区域等分为numRows行*numCols列个子区域,按照从左到右,从上到下的顺序对每个子区域进行编号
subplot在plotNum指定的区域中创建一个子图Axes
A = plt.subplot(2,2,1) plt.plot([0,1],[0,1], color="red") plt.subplot(2,2,2) plt.title("B") plt.plot([0,1],[0,1], color="green") plt.subplot(2,1,2) plt.title("C") plt.plot(np.arange(10), np.random.rand(10), color="orange") # 选择子图A plt.sca(A) plt.title("A") plt.show()