数据分析(3)-matplotlib基础

 

1.安装

安装visual环境:https://visualstudio.microsoft.com/downloads/

安装numpy:pip install numpy

安装matplotlib:pip install matplotlib

2.基本使用(折线图)

复制代码
import matplotlib.pyplot as plt
import numpy as np

# 查看windows下的字体:C:\Windows\Fonts
import matplotlib.font_manager as fm

# 导入并设置中文字体,将字体旋转45度
myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\simsun.ttc')

# 绘制正方形边长与周长关系变化图
# 定义x,范围是(-3,3),个数是50
x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

# 定义图像窗口figure 2,figsize表示图像窗口大小,dpi图像窗口像素
fig = plt.figure(num=2, figsize=(8, 8), dpi=60)

# 画(x,y)曲线,color表示曲线颜色,alpha表示折线透明度(0-1),linestyle表示曲线样式,linewidth表示曲线宽度,marker表示曲线折点样式
l1 = plt.plot(x, y1, color='blue',alpha=0.5,linestyle='--',linewidth=2,marker='',label='y1')
l2 = plt.plot(x, y2, color='black',alpha=0.5,linestyle='-',linewidth=2,marker='',label='y2')

# 设置标题
plt.title('实验图', fontproperties=myfont, color='black', size=16)

# xlabel、ylabel分别拟定x、y轴名称,fontproperties指定字体,size设置字体大小,rotation设置字体角度
plt.xlabel('x轴', fontproperties=myfont, rotation=0, size=12)
plt.ylabel('y轴', fontproperties=myfont, size=12)

# 分别设置x、y轴范围
plt.xlim((-1, 2))
plt.ylim((-2, 3))

# 设置坐标轴刻度及名称
tick = np.linspace(-1, 2, 5)
plt.xticks(tick)
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])

# 获取当前坐标轴信息
ax = plt.gca()

# ---------设置图像边框及颜色--------------------
# .spines设置边框,.set_color设置边框颜色
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# ----------调整刻度及边框位置--------------------
# .xaxis.set_ticks_position设置x坐标刻度数字或名称的位置
# .spines设置边框:x轴,.set_position设置边框位置:y=0位置
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))

# .yaxis.set_ticks_position设置y坐标刻度数字或名称的位置
# .spines设置边框:y轴,.set_position设置边框位置:x=0位置
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 对[x0,y0]进行标注
plt.scatter([x[10], ], [y1[10], ], s=50, color='b')

# 设置图例及位置
plt.legend(loc='best')
#plt.legend(handles=[l1,l2,], labels=['yl_line','y2_line'], loc='best')

# 显示图像
plt.show()
复制代码

3.参考资料

1)科赛:https://www.kesci.com/home/project/5de9f0a0953ca8002c95d2a9

2)官网:https://matplotlib.org/gallery/index.html#lines-bars-and-markers

3)天池:https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12282042.0.0.68792042BNUzC2&postId=23636

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
df = pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
 
# 创建图表窗口,设置窗口大小
# 创建图表对象,并赋值与fig
fig = df.plot(figsize=(6,4))
 
# 图名
plt.titile('')
 
# x轴标签
# y轴标签
plt.xlabel('')
plt.ylabel('')
 
# 显示图例,loc表示位置
plt.legend(loc='')
 
# x轴边界
# y轴边界
plt.xlim([0,12])
plt.ylim([0,1.5])
 
# 设置x刻度
# 设置y刻度
plt.xticks(range(10))
plt.yticks([0,0.2,0.4,0.6,1.0,1.2])
 
# 设置x轴刻度标签
# 设置y轴刻度标签
fig.set_xticklabels("% lf" %i for i in range(10))
fig.set_yticklabels("% 2f" %i for i in [0,0.2,0.4,0.6,1.0,1.2])
 
# 显示网格
# linestyle:线型
# color:颜色
# linewidth:宽度
# axis:x,y,both,显示x、y、两者的格网
plt.grid(True, linestyle='', color='', linewidth='', axis='')
 
# 刻度显示
plt.tick_params(bottom='on', top='off', left='on', right='off')
 
# 刻度显示方向,in, out, inout
# 需要导入matplotlib,不仅是matplotlib.pyplot
matplotlib.reParams['xtick_direction'] = 'out'
matplotlib.reParams['ytick_direction'] = 'inout'
 
# 关闭坐标轴
frame=plt.gca()
 
# x轴不可见
# y轴不可见
frame.axes.get_xaxis().set_visible(False)
frame.axes.get_yaxis().set_visible(False)
 
图表样式参数
linestyle,线样式
marker,点样式
color,线颜色
alpha,透明度
colormap,颜色板,渐变色
style,包含:linestyle、marker、color
 
风格:自动配色,调样式
import matplotlib style as psl
psl.available
psl.use('')
 
 
 
刻度、注解、图表输出
from matplotlib.ticker import MultipleLocator,FormatStrFormatter
 
# 将主刻度标签设置为10的倍数
xmajorLocator = MultipleLocator(20)
 
# 设置x轴标签文本的格式
xmajorFormatter = FormatStrFormatter('%.0f')
 
# 将x轴此刻度标签设置为5的倍数
xminorLocator = MultipleLocator(5)
 
# 将y轴主刻度标签设置为0.5的倍数
ymajorLocator = MultipleLocator(0.5)
 
# 设置y轴标签文本的格式
ymajorFormatter = FormatStrFormatter('%.1f')
 
# 将y轴此刻度标签设置为0.1的倍数
yminorLocator = MultipleLocator(0.1)
 
# 设置x轴主刻度
ax.xaxis.set_major_locator(xmajorLocator)
 
# 设置x轴标签文本格式
ax.xaxis.set_major_formatter(xmajorFormatter)
 
# 设置x轴次刻度
ax.xaxis.set_minor_locator(xinorLocator)
 
# 设置y轴主刻度
ax.yaxis.set_major_locator(ymajorLocator)
 
# 设置y轴标签文本格式
ax.yaxis.set_major_formatter(ymajorFormatter)
 
# 设置y轴次刻度
ax.yaxis.set_minor_locator(yminorLocator)
 
# which 格网显示
# x坐标轴的网格使用主刻度
# y坐标轴的网格使用次刻度
ax.xaxis.grid(True,which='majpr')
ax.yaxis.grid(True,which='minor')
 
# 删除坐标轴的刻度显示
ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())
 
注解
plt.text(5,0.5,'最大值',fontsize=10)
 
 
子图创建方法1
fig = plt.figure(figsize=(10,6),facecolor='gray')
 
ax1 = fig.add_subplot(2,2,1)
plt.plot(np.random.rand(50).cumsum(),'k--')
plt.plot(np.random.randn(50).cumsum(),'b--')
 
ax2.fig.add_subplot(2,2,2)
ax2.hist(np.random.rand(50),alpha=0.5)
 
ax3 = fig.add_subplot(2,2,3)
df3 = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
ax4.plot(df3,alpha=0.5,linestyle='--',marker=' ')
 
子图创建方法2
fig.axes = plt.subplots(2,3,figsize=(10,4))
ts = pd.Series(np.random.randn(1000),cumsum())
 
ax1 = axes[0,1]
ax1.plot(ts)
 
# sharex,sharey:是否共享x,y刻度
fig,axes = plt.subplots(2,2,sharex=True,sharey=True)
 
for i in range(2):
    for j in range(2):
        axes[i,j].hist(np.random.randn(500),color='k',alpha=0.5)
 
# wspace、hspace:用于控制宽度和高度高分比,如subplot间距
plt.subplots_adjust(wspace=0,hspace=0)

  

 

 

posted @   麦小秋  阅读(285)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示