这里大部分参考了博主:https://blog.csdn.net/Notzuonotdied/article/details/77876080 的整理x结果
## plot 板块##
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(1,10,10)
y=x
y1=2*x**2+1
y2=2*x**3+1
# 使用figure()函数重新申请一个figure对象
# 注意,每次调用figure的时候都会重新申请一个figure对象
plt.figure()
plt.plot(x,y)
# 第一个参数表示的是编号,第二个表示的是图表的长宽
plt.figure(num = 3, figsize=(8, 5))
# 当我们需要在画板中绘制两条线的时候,可以使用下面的方法:
l1,= plt.plot(x, y2,label='bbb')
l2,= plt.plot(x, y1,
color='red', # 线颜色
linewidth=1.0, # 线宽
linestyle='--', # 线样式
label='aaa'
)
#首先不知道为啥非要加上上述的','其次如果后面指定了新的label,以新的为主
plt.legend(handles=[l1,l2],
labels=[r'aaa',r'ddd'],
loc='best')#loc:1,2,3,4,从右上角逆时针
#更多关于legend的可以查看文档https://matplotlib.org/users/legend_guide.html#creating-artists-specifically-for-adding-to-the-legend-aka-proxy-artists
# 设置轴线的lable(标签)
plt.xlabel("I am x")
plt.ylabel("I am y")
#设置取值参数范围:
plt.xlim((-1,2))
plt.ylim((1,3))
#设置坐标轴点的位置
new_ticks= np.linspace(-1,2,5)
plt.xticks(new_ticks)
#y 轴对应点加上我们想要的文字:加上$可以倾斜
plt.yticks([-2,-1.8,-1,1.22,5],
[r'$really\ bad$',r'$bad$',r'normal','$good$','really good'])
#gca = 'get current axis' 主要是为了对接下来的一些东西做设定
ax=plt.gca()
#将右边和上面的边框颜色去掉:
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#设置x轴和y轴的显示位置:
ax.xaxis.set_ticks_position('bottom')#(指的是整个图的下面)
ax.yaxis.set_ticks_position('right')
#定义x,y轴在图像中坐标位置:
ax.spines['bottom'].set_position(('data',0))#'bottom'位于y=0
ax.spines['left'].set_position(('data',0.5))#'left'位于=1
#批注,显示交叉点
x0=1
y0=2*x0+1
plt.scatter(x0,y0,s=66,color='r')#s表示点的大小
plt.plot([x0,x0],[y0,0],'k-.',lw=2.5)
#设置关键提示信息
plt.annotate(r'$2x+1=%s$'%y0,
xy=(x0,y0),
xycoords='data',
xytext=(+30,-30),
textcoords='offset points',
fontsize=16,
#设置箭头:
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')
)
#用于显示文字:
plt.text(0,3,
r'$This\ is\ a\ good\ idea.\ \mu\ \sigma_i$',
fontdict={'size':16,'color':'g'})
plt.show()
## 条状图##
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
n = 12
X = np.arange(n)
Y1 = (1 - X/float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X/float(n)) * np.random.uniform(0.5, 1.0, n)
plt.figure(figsize=(12, 8))
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x, y in zip(X,Y1):
# ha: horizontal alignment水平方向
# va: vertical alignment垂直方向
plt.text(x, y+0.05, '%.2f' % y, ha='center', va='bottom')
for x, y in zip(X,-Y2):
# ha: horizontal alignment水平方向
# va: vertical alignment垂直方向
plt.text(x, y-0.05, '%.2f' % y, ha='center', va='top')
# 定义范围和标签
plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-1.25, 1.25)
plt.yticks(())
plt.show()
## subplot 板块##
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
# 将整个figure分成两行三列
plt.subplot(2, 3, 1)
# 第一个参数表示X的范围,第二个是y的范围
plt.plot([0, 1], [0, 2])
#表示两行三列中的第一个位置,按照行先排序
plt.subplot(231)
plt.plot([0, 1], [0, 2])
plt.subplot(232)
plt.plot([0, 2], [0, 4])
plt.subplot(234)
plt.plot([0, 1], [0, 3])
plt.subplot(236)
plt.plot([0, 1], [0, 4])
plt.show()
###分格显示和主次坐标轴看原微博###
##箱线图板块##
参考:(作者:博观厚积 链接:https://www.jianshu.com/p/b2f70f867a4a)
boxes, 是25分位值和75分位值构成的box,
medians, 是中位值的横线, 每个median是一个Line2D对象
whiskers, 是指从box 到error bar之间的竖线.
fliers, 是指error bar线之外的离散点.
caps, 是指error bar横线.
means, 是均值的横线,
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(2) #设置随机种子
df = pd.DataFrame(np.random.rand(5,4),
columns=['A', 'B', 'C', 'D'])#先生成0-1之间的5*4维度数据,再装入4列DataFrame中
df.boxplot() #也可用plot.box()
plt.show()
f=df.boxplot(sym='r*',patch_artist=True,return_type='dict')
#没有return_type='dict' 会报错:TypeError: 'AxesSubplot' object is not subscriptable
for box in f['boxes']:
# 箱体边框颜色
box.set( color='#7570b3', linewidth=2)
# 箱体内部填充颜色
box.set( facecolor = '#1b9e77' )
for whisker in f['whiskers']:
whisker.set(color='r', linewidth=2)
for cap in f['caps']:
cap.set(color='g', linewidth=3)
for median in f['medians']:
median.set(color='DarkBlue', linewidth=3)
for flier in f['fliers']:
flier.set(marker='o', color='y', alpha=0.5)
plt.show()
#横向:
df.boxplot(sym='r*',vert=False,patch_artist=True,meanline=False,showmeans=True)
plt.show()
其中,sym='r*',表示异常点的形状,
vert=False,表示横向还是竖向(True),,
patch_artist=True,(上下四分位框内是否填充,True为填充)
meanline=False,showmeans=True,是否有均值线及其形状,meanline=True时,均值线也像中位数线一样是条红色线段,这样容易与中位数线混淆。
另外,还有其他参数,比如notch表示中间箱体是否缺口,whis为设置数据的范围,showcaps、showbox是否显示边框
more:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.boxplot
涉及到的参数:
color:
one of {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}
;
linewidth(lw):直接写数字
linstyle:'--','k-.'
lineStyles
= {'': '_draw_nothing', ' ': '_draw_nothing', '-': '_draw_solid', '--': '_draw_dashed', '-.': '_draw_dash_dot', ':': '_draw_dotted', 'None': '_draw_nothing'}¶
loc:'best',1,2,3,4
==========关闭图:===========
clf() # 清图。
cla() # 清坐标轴。
close() # 关窗口
【e.g.】
fig = plt.figure() # 新图 0
plt.savefig() # 保存
plt.close('all') # 关闭图 0