文章目录
- 主博客:Python 编程笔记(本人出品,必属精品)
- 画图主博客:Python 各种画图
Part.I 线型
Chap.I 基本线型
基本线型有四种:
符号 | 字符串 | 元组 | 样式说明 |
---|---|---|---|
- | solid | (0, ()) | 实线 |
: | dotted | (0, (1, 1)) | 点线 |
-- | dashed | (0, (3, 1)) | 虚线 |
-. | dashdot | (0, (3, 1)) | 点横线 |
线型绘制代码示例
X = [0,1]
style=['-',':','--','-.']
for i in range(4):
Y=[i,i]
plt.plot(X,Y,linestyle=style[i],label =style[i])
plt.legend(loc='best')
plt.show()
可以绘制上述线型大致样子:
Chap.II 元组线型
用元组表示线型的方法,比如(0,(1,2,3,4,2,2))
表示的线型如下:
其中
0
:表示线实际起始点与名义起始点间距为0磅1,2
:第一小段线宽1磅,第一和第二段之间距离2磅3,4
:第二小段线宽3磅,第二和第三段之间距离4磅2,2
:第三小段线宽2磅,第三和第四段之间距离2磅
这后面估计可以无限在后面加的,进而可以产生无限种线型。
Part.II 点符号
Chap.I 基本符号
下面是一些绘图点符号:
符号 | 含义 | 符号 | 含义 |
---|---|---|---|
'.' | point marker | 's' | square marker |
',' | pixel marker | 'p' | pentagon marker |
'o' | circle marker | '*' | star marker |
'v' | triangle_down marker | 'h' | hexagon1 marker |
'^' | triangle_up marker | 'H' | hexagon2 marker |
'<' | triangle_left marker | '+' | plus marker |
'>' | triangle_right marker | 'x' | x marker |
'P' | plus(filled) | 'X' | X(filled) |
'1' | tri_down marker | 'D' | diamond marker |
'2' | tri_up marker | 'd' | thin_diamond marker |
'3' | tri_left marker | ∣ | ∣ | vline marker |
'4' | tri_right marker | '_' | hline marker |
'8' | octagon |
绘制代码示例
X = list(range(1,26))
Y = list(np.full(25,1))
plt.figure()
mark=['.',',','o','v','^','<','>','1','2','3','4','8',
's','p','P','*','h','H','+','x','X','D','d','|','_']
for i in range(25):
plt.scatter(X[i],Y[i],marker=mark[i])
plt.xticks(X,mark)
plt.ylim(0.5,1.5)
plt.gca().set_aspect(1)
plt.show()
可以绘制上述符号大致样子:
Chap.II 高级符号
这类高级marker使用marker ='$\xxx$'
来调用
样式 | 代码 | 样式 | 代码 |
---|---|---|---|
ϖ | \varpi | ⌈ | \lceil |
ϱ | \varrho | ⌊ | \lfloor |
ς | \varsigma | ⌞ | \llcorner |
ϑ | \vartheta | ⌟ | \lrcorner |
ξ | \xi | ⟩ | \rangle |
ζ | \zeta | ⌉ | \rceil |
Δ | \Delta | ⌋ | \rfloor |
Γ | \Gamma | ⌜ | \ulcorner |
Λ | \Lambda | ↑ | \uparrow |
Ω | \Omega | ⌝ | \urcorner |
Φ | \Phi | Θ | \Theta |
Π | \Pi | { | \{ |
Ψ | \Psi | ` | ` |
Σ | \Sigma | } | \} |
Υ | \Upsilon | ⋀ | \bigwedge |
Ξ | \Xi | ⋂ | \bigcap |
℧ | \mho | ⋃ | \bigcup |
∇ | \nabla | ⨀ | \bigodot |
ℵ | \aleph | ⨁ | \bigoplus |
ℶ | \beth | ⨂ | \bigotimes |
ℸ | \daleth | ⨄ | \biguplus |
ℷ | \gime l | ⋁ | \bigvee |
∐ | \coprod | ⟨ | \langle |
⇓ | \Downarrow | ∫ | \int |
⇑ | \Uparrow | ∮ | \oint |
‖ | \Vert | ∏ | \prod |
↓ | \downarrow | ∑ | \sum |
符号绘制代码示例:
X = list(range(1,200,10))
Y = list(np.full(58,0))
plt.figure()
mark1=['varpi','varrho','varsigma','vartheta','xi','zeta','Delta','Gamma','Lambda','Omega',
'Phi','Pi','Psi','Sigma','Theta','Upsilon','Xi','mho','nabla','aleph']
mark2=['beth','daleth','gimel','Downarrow','Uparrow','Vert','downarrow','langle','{','}',
'lceil','lfloor','llcorner','lrcorner','rangle','rceil','rfloor','ulcorner','uparrow','urcorner']
mark=['vert','|','bigcap','bigcup','bigodot','bigoplus','bigotimes','biguplus','bigvee','bigwedge',
'coprod','int','oint','prod','sum','coprod','int','oint','prod','sum']
for i in range(20):
str='$\\'+mark[i]+'$'
plt.scatter(X[i],Y[i],marker=str,s=100)
plt.xticks(X,mark,rotation=60)
plt.ylim(-5,5)
plt.gca().set_aspect(1)
plt.show()
可以绘制上述符号大致样子:
值得注意的是,Python还支持自定义marker,它也是使用marker ='$\xx$'
来调用,比如$\heartsuit$
表示
Part.III 颜色
Chap.I 单词或字母表示颜色
常用的单字母颜色:
颜色符号 |
---|
b 蓝色 |
g 绿色 |
r 红色 |
c 青色 |
m 品红 |
y 黄色 |
k 黑色 |
w 白色 |
Chap.II 十六进制表示颜色
关于颜色,除了使用单词之外,我们还可以使用16进制来表示颜色。比如#CECECE
,表示一种淡淡的灰色。16进制表示颜色是一种常见的方法,我们知道光的三原色是红绿蓝,也就是RGB。在计算机领域常用0-255
这256个数字来表示某一个原色的强弱。通过三原色的不同组合,我们可以组合出所有的颜色。一共三种原色,那么自然也就需要三个数字来表示,由于255以内的数字写成16进制只有两位,所以我们可以用6位16进制的数字来代表颜色。
常用十六进制颜色对照表代码查询: https://www.cnblogs.com/planetwithpig/p/11663209.html
十六进制颜色与十进制 RGB 颜色相互转换:'35,26,17'
↔ #231A11
def RGB_to_Hex(rgb):
""" Convert (r,g,b) to 16-进制 """
RGB = rgb.split(',') # 将RGB格式划分开来
color = '#'
for i in RGB:
num = int(i)
# 将R、G、B分别转化为16进制拼接转换并大写 hex() 函数用于将10进制整数转换成16进制,以字符串形式表示
color += str(hex(num))[-2:].replace('x', '0').upper()
# print(color)
return color
def Hex_to_RGB(hex):
""" Convert 16-进制 to (r,g,b) """
r = int(hex[1:3],16)
g = int(hex[3:5],16)
b = int(hex[5:7], 16)
rgb = str(r)+','+str(g)+','+str(b)
print(rgb)
return rgb
Chap.III matplotlib 默认配色顺序
可以通过下面的代码来输出 matplotlib 的默认配色顺序,笔者输出了前 20 种颜色
import matplotlib.pyplot as plt
for i in range(20): # 可修改这个数字
line = plt.plot([i, i])
c = line[0].get_color()
plt.annotate(repr(i) + ":"+c, (0, i+0.1))
print(c)
plt.show()
前 20 种颜色为:
# matplotlib 前 20 种颜色
default_color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
'#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf',
'#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
'#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']
Chap.IV 巧用 colorbar
根据colormap
来创建多种颜色
cm = plt.cm.get_cmap('RdYlBu_r',nums) # 创建 nums 种颜色,保存在 cm 中
c(indx) # 取出来第 index 种颜色来使用,注意不是用[]而是用()
绘图时根据因变量的值大小来染以不同的颜色
cm = plt.cm.get_cmap('RdYlBu_r',nums) # RdYlBu_r末尾加r表示颜色取反
plt.scatter(x, y,c=x,cmap=cm)
它的意思是,根据指标 x
的大小来从颜色列表中选取颜色,颜色列表是cm
(它是一个colormap
)
matplotlib 中所有 cmap
的可选参数
比如绘制一个协方差矩阵的相关图:
def imshow():
Q1=[[6.290,5.978,0.544],
[5.978,6.292,2.340],
[0.544,2.340,6.288]]
Q2=[[4.476,0.334,0.230],
[0.334,1.146,0.082],
[0.230,0.082,0.626]]
# ------------ draw -----------
fig, ax = plt.subplots(nrows=1, ncols=2)
plt.subplot(1,2,1)
plt.imshow(Q1, cmap='YlGn')
plt.subplot(1,2,2)
plt.imshow(Q2, cmap='YlGn')
plt.colorbar(ax=ax,orientation="horizontal")
plt.show()
return
自定义 colorbar:
from matplotlib.colors import LinearSegmentedColormap, ListedColormap
colors = ['#211A3F','#453370','#A597B6','#FEF3E8','#D06C9D'] # 元素个数为两个及以上
colors.reverse()
cmap1 = ListedColormap(colors) # 分段 colormap
cmap2 = LinearSegmentedColormap.from_list('mymap', colors) # 连续 colormap
比如:
def imshow():
Q1=[[6.290,5.978,0.544],
[5.978,6.292,2.340],
[0.544,2.340,6.288]]
Q2=[[4.476,0.334,0.230],
[0.334,1.146,0.082],
[0.230,0.082,0.626]]
# ------------ draw -----------
fig, ax = plt.subplots(nrows=1, ncols=2)
plt.subplot(1,2,1)
colors = ['#211A3F','#453370','#A597B6','#FEF3E8','#D06C9D']
colors.reverse()
cmap1 = ListedColormap(colors)
cmap2 = LinearSegmentedColormap.from_list('mymap', colors)
plt.imshow(Q1, cmap=cmap1)
plt.colorbar(orientation="horizontal")
plt.subplot(1,2,2)
plt.imshow(Q2, cmap=cmap2) # YlGn
plt.colorbar(orientation="horizontal")
plt.show()
return
想要控制 colorbar 标签的字体,只需令cb=plt.colorbar()
,然后对cb.ax
进行设置即可!