matplotlib教程

有的时候我们想知道我们所处理的数据是如何分布的,在计算的时候又是如何变化的.仅靠打印很难有直观的感受.最好的办法就是用图像把数据表达出来.
本文介绍一下phthon中常用画图模块matplotlib的基本用法,相当于matlab

曲线图

Figure_1.png
# 构造数据
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y1 = x ** 2 + 1
y2 = 2 * x + 1

# 画图
plt.plot(x, y2,label='2 * x + 1')
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--',label='x ** 2 + 1')
# 显示标注
plt.legend()

plt.show()

散点图

Figure_2.png
import matplotlib.pyplot as plt
import numpy as np

# 散点图
x = np.random.normal(0, 1, 1024)
y = np.random.normal(0, 1, 1024)
# 随机颜色
T = np.arctan2(x, y)

plt.scatter(x, y, s=75, c=T, alpha=0.5)

# 设置横纵坐标轴展示范围
plt.xlim((-1.5,1.5))
plt.ylim((-1.5,1.5))

# 隐藏横纵坐标轴
plt.xticks(())
plt.yticks(())

plt.show()

直方图

Figure_4.png
import matplotlib.pyplot as plt
import numpy as np

##  直方图。。。。

## 生成数据
n = 12
X = np.arange(n)
Y1 =  np.random.uniform(0.5,1.0,n)
Y2 =  np.random.uniform(0.5,1.0,n)

#  画图
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

## 标注数值
for x,y in zip(X,Y1):
    plt.text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')

# 设置y轴展示范围
plt.ylim(-1.25,+1.25)
plt.show()

饼状图

Figure_1-1.png
import matplotlib.pyplot as plt

#调节图形大小,宽,高
plt.figure(figsize=(6,9))
#定义饼状图的标签,标签是列表
labels = [u'one',u'two',u'three']
#每个标签占多大,会自动去算百分比
sizes = [60,30,10]
colors = ['red','yellowgreen','lightskyblue']
#将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
explode = (0.05,0,0)

patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors,
                                labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
                                startangle = 90,pctdistance = 0.6)

#labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
#shadow,饼是否有阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
#pctdistance,百分比的text离圆心的距离
#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本

#改变文本的大小
#方法是把每一个text遍历。调用set_size方法设置它的属性
for t in l_text:
    t.set_size=(30)
for t in p_text:
    t.set_size=(20)
# 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend()
plt.show()

手写图

这个就是好看用的了,嘿嘿


Figure_6.png
import numpy as np
import matplotlib.pyplot as plt

eqs = []
eqs.append((r"$W^{3\beta}_{\delta_1 \rho_1 \sigma_2} = U^{3\beta}_{\delta_1 \rho_1} + \frac{1}{8 \pi 2} \int^{\alpha_2}_{\alpha_2} d \alpha^\prime_2 \left[\frac{ U^{2\beta}_{\delta_1 \rho_1} - \alpha^\prime_2U^{1\beta}_{\rho_1 \sigma_2} }{U^{0\beta}_{\rho_1 \sigma_2}}\right]$"))
eqs.append((r"$\frac{d\rho}{d t} + \rho \vec{v}\cdot\nabla\vec{v} = -\nabla p + \mu\nabla^2 \vec{v} + \rho \vec{g}$"))
eqs.append((r"$\int_{-\infty}^\infty e^{-x^2}dx=\sqrt{\pi}$"))
eqs.append((r"$E = mc^2 = \sqrt{{m_0}^2c^4 + p^2c^2}$"))
eqs.append((r"$F_G = G\frac{m_1m_2}{r^2}$"))


plt.axes([0.025,0.025,0.95,0.95])

for i in range(24):
    index = np.random.randint(0,len(eqs))
    eq = eqs[index]
    size = np.random.uniform(12,32)
    x,y = np.random.uniform(0,1,2)
    alpha = np.random.uniform(0.25,.75)
    plt.text(x, y, eq, ha='center', va='center', color="#11557c", alpha=alpha,
             transform=plt.gca().transAxes, fontsize=size, clip_on=True)

plt.xticks([]), plt.yticks([])
# savefig('../figures/text_ex.png',dpi=48)
plt.show()

本文链接:https://www.kupposhadow.com/post/5a1fd8dbe717c543d753e7d6
本站采用「署名 4.0 国际(CC BY 4.0)」创作共享协议。只要在使用时署名,那么使用者可以对本站所有原创内容进行转载、二次创作、商业性使用。

你可能感兴趣的:(matplotlib教程)