python标签保留⼩数画图_python绘图总结本⽂主要包括python绘图中的matplotlib, pandas, seaborn三个部分。matplotlib分为如下⼏个主题中⽂⽀持
plt⽰例代码
⾯向对象
创建⼦图
全局设置
颜⾊系统
backend设置
循环作图
plt不输出对象
⾸先导⼊基本模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
本⽂代码在jupyter notebook中运⾏,最后⼀⾏魔法命令,可以在画图时结尾不需要plt.show()
中⽂⽀持
plt⽰例代码
⽤pyplot模块作图⾮常简单,这⾥⽤⼀个例⼦展⽰各个位置的设置⽅式
bar1 = [4, 5, 6, 8, 7]
bar2 = [7, 6, 2, 5, 4]
labels = ['⼩明', '⼩张', '⼩洪', '⼩红', '⼩铭']
bar_width = 0.35
plt.bar(np.arange(5)-0.5*bar_width, bar1, label='第⼀次',
width=bar_width, color='#58C9B9')
plt.bar(np.arange(5)+0.5*bar_width, bar2, label='第⼆次',
width=bar_width, color='#519D9E')
plt.xlabel('⼈名', fontsize=15)
plt.ylabel('数量', fontsize=15)
plt.title('数量统计', fontsize=18)
plt.ylim([0, 10])
plt.legend()
plt.box(False)
for i, j in enumerate(bar1):
<(i-0.5*bar_width-0.05, j+0.1, str(j))
for i, j in enumerate(bar2):
<(i+0.5*bar_width-0.05, j+0.1, str(j))
plt.savefig('fig.pdf', bbox_inches='tight')
其中plt.bar第⼀个参数是横轴坐标;icks第⼀个参数也是横坐标列表,指定在哪些横坐标上标刻度。
绘制各种图形的代码⽰例可以参考官⽹
⾯向对象
Matplotlib中常⽤对象的包含关系为Figure > Axes > (Line2D, Text,etc.)。Figure对象表⽰⼀整张图表;其中可包含多个绘图区域,可以理解为多个坐标轴,⽤Axes表⽰,也可以称之为⼦图;在每⼀个⼦图中绘制具体的图形对象,如点、线、⽂本等。
很多情况下直接使⽤pyplot模块就够⽤了,但是当有多个图和坐标系时,使⽤⾯向对象的创建⽅式可以更加⾃由地在⼦图之间进⾏切换。
对象的创建
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.plot([1, 2, 3])
axes创建后使⽤⽅法与plt没有很⼤的区别,但是还是会有⼀些差别,⽐如标题坐标轴的设置
⾯向对象与plt的差异
axes.set_title('title')
axes.set_xlabel('x')
axes.set_ylabel('y')
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
有的函数只能由axes调⽤⽽不能⽤plt,⽐如画多边形时的add_patch
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.plot([1, 2, 3])
poly = plt.Polygon([[0.5, 1], [1, 1.5], [1, 1]],
facecolor='0.9', edgecolor='0.5')
axes.add_patch(poly)
⾯向对象与plt的相互转化
但是有时本来只是在⽤plt作图,为了⽤add_patch⽽特意创建⼀个axes就⽐较⿇烦,此时可以⽤a()获取当前的Axes对象
plt.plot([1, 2, 3])
poly = plt.Polygon([[0.5, 1], [1, 1.5], [1, 1]],
facecolor='0.9', edgecolor='0.5')
下⾯⼀个例⼦很好地展现了图表之间的切换
plt.figure(1)
plt.figure(2)
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
x = np.linspace(0, 3, 100)
for i in range(1, 4):
plt.figure(1)
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1)
plt.plot(x, np.sin(i*x))
plt.sca(ax2)
plt.plot(x, np.cos(i*x))
说明plt.figure(1)其中的数字⽤于图之间的区分,这个函数调⽤第⼀次表⽰创建id为1的图(Figure对象),调⽤第⼆次表⽰切换到这个图上,这样之后调⽤plt就会⾃动在这个图中绘制
plt.sca表⽰切换到该Axes对象,这样之后调⽤plt就会⾃动在这个⼦图中绘制
上述⽅法完全使⽤plt来完成,虽然可以做,但可读性较差,下⾯使⽤对象来完成会更加清晰。
fig1, ax0 = plt.subplots(1, 1)
fig2, (ax1, ax2) = plt.subplots(2, 1)
x = np.linspace(0, 3, 100)
for i in range(1, 4):
ax0.plot(x, np.exp(i*x/3))
ax1.plot(x, np.sin(i*x))
ax2.plot(x, np.cos(i*x))
Axes设置
Axes对象设置坐标轴、标题的相关⽅法⼀般分为以set为前缀与get前缀两种,但不是⼀⼀对应的,有的⽅法只有get⽽没有set,展⽰⼀部分⽅法如下
Axes.set_xlim
<_xlim
Axes.set_xlabel
Axes.set_xticks
Axes.set_xticklabels
<_xticklines
从get的结果可以看出,⼀张图是由很多基础对象构成的。⽐如⼀个折线图,不仅折线是Line2D对象,⽽且_xticklines的结果也是Line2D,⽽get_xticklabels是Text对象,⼀整张图就是由这些基础对象拼凑⽽成的。
常见的设置⽅式有如下⼏种
fig, ax = plt.subplots()
ax.plot([1, 2, 3])
ax.set_title('title')
ax.set_xlabel('x')
ax.set_ylabel('y')
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')
# ax.set(title='title', xlabel='x', ylabel='y')
更多设置内容参考官⽹Axes API和博客(setp和getp的⽤法)。
关于setp和getp多说⼀句,下⾯展⽰⼏组等价做法
<_xaxis()
ax.set_xlabel('x')
plt.setp(ax, 'xlabel', 'x')
plt.setp(ax.lines[0],'color','g')
<_lines()[0].set_color('g')
只要Axes类中定义了get_xxx⽅法,就可以⽤getp;定义了set_xxx⽅法,就可以⽤setp。line2D等其他类也是⼀样。这些类都可以在官⽹API中到。所以任何对象都可以去API看有哪些属性可以设置。此外,get既可以查参数值也查对象,⽐如lines⾪属于axes,就可以由后者调⽤出前者,matplotlib中各种类的⾪属关系可以参考之前提到的那篇绘图: matplotlib核⼼剖析。
创建⼦图
matplotlib中规则排版的⼦图有多种设置⽅式
# 第⼀种
plt.subplot(211)
plt.plot([1, 2, 3, 4])
plt.subplot(212)
plt.scatter([1,2,3,4], [3,4,2,1])
# 第⼆种(可以配合循环使⽤)
plt.subplot(1, 2, 1)
plt.plot([1, 2, 3, 4])
plt.subplot(1, 2, 2)
plt.scatter([1,2,3,4], [3,4,2,1])
# 第三种
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)
# 第四种
matplotlib中subplotax1 = plt.subplot(211)
ax2 = plt.subplot(212)
# 第五种
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
# 第六种
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
for ax in axes.flatten():
pass
更复杂的排版可以参考官⽹
全局设置
套⽤主题
plt.style.use('ggplot')
plt.style.use('default')
print(plt.style.available)
with t(('dark_background')):
plt.plot(np.sin(np.linspace(0, 2 * np.pi)), 'r-o')
主题效果展⽰,⾃定义主题可以在stylelib⽂件夹中创建.mplstyle⽂件,有哪些参数可以参考下⼀节,参考官⽹。全局修改
import matplotlib as mpl
其他修改⽅法
# 第⼀种
<('lines', linewidth=2, color='r')
# 第⼆种

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。