xiaohuhu

Jupyter Notebook是一种Web应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中。本文例子都是在Jupyter Notebook上完成,Anaconda3自带该工具,直接点击打开。

 

启动后,在New下拉菜单中选择Python3,就会生成一个代码交互界面。

 

matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库。它最初由John D.Hunter(JDH)创建,目前由一个庞大的开发人员团队维护。它非常适合创建出版物上用的图表。
虽然还有其它的Python可视化库,matplotlib却是使用最广泛的,并且它和其它生态工具配合也非常完美。我认为,可以使用它作为默认的可视化工具。

#初始配置
import
numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt plt.rcParams[\'font.sans-serif\']=[\'SimHei\'] plt.rcParams[\'axes.unicode_minus\']=False import seaborn as sns import warnings; warnings.filterwarnings(action=\'once\') large = 22; med = 16; small = 12 params = {\'axes.titlesize\': large, \'legend.fontsize\': med, \'figure.figsize\': (16, 10), \'axes.labelsize\': med, \'axes.titlesize\': med, \'xtick.labelsize\': med, \'ytick.labelsize\': med, \'figure.titlesize\': large} plt.rcParams.update(params) plt.style.use(\'seaborn-whitegrid\') sns.set_style("white") %matplotlib inline print(mpl.__version__) print(sns.__version__)

 

 1、画一个圆

import matplotlib.pyplot as plt
#用来正常显示中文
plt.rcParams[\'font.sans-serif\']=[\'SimHei\']
#用来正常显示负号
plt.rcParams[\'axes.unicode_minus\']=False
import numpy as np
from matplotlib.font_manager import FontProperties
#设置字体为宋体
font =FontProperties(fname="C:/Windows/Fonts/simsun.ttc",size=14)
#在Jupyter中显示图像
%matplotlib inline
%config InlineBackend.figure_format="retina"
#绘制一个圆形散点图
t=np.arange(1,10,0.05)
x=np.sin(t)
y=np.cos(t)
#定义一个图像窗口,指定比例
plt.figure(figsize=(8,5))
#绘制一条线
plt.plot(x,y,"r-*")
#是坐标轴相等
plt.axis("equal")
plt.xlabel("正弦",fontproperties=font)
plt.ylabel("余弦",fontproperties=font)
plt.title("一个圆形",fontproperties=font)
#显示图像
plt.show()

 2、点、线图

#绘制点图或线图
import numpy as np
import matplotlib.pyplot as plt
#生成X
x1=np.linspace(0.0,5.0)
x2=np.linspace(0.0,2.0)
#生成Y
y1=np.cos(2*np.pi*x1)*np.exp(-x1)
y2=np.cos(2*np.pi*x2)
#绘制第一个子图,2表示整个绘图区域分成2行,第一个1表示整个绘图区域分成1列,
#第二个1表示子图的位置在左上(从左到右,从上到下的顺序对每个子区域进行编号)
plt.subplot(2,1,1)
#x1表示x轴数据,y1表示y轴数据,yo-表示曲线格式
plt.plot(x1,y1,\'yo-\')
plt.title(\'A tale of 2 subplots\')
plt.ylabel(\'Damped oscillation\')
#绘制第二个子图
plt.subplot(2,1,2)
plt.plot(x2,y2,\'r.-\')
plt.xlabel(\'time (s)\')
plt.ylabel(\'Undamped\')
plt.show()

 3、直方图

#绘制直方图
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

mu=100 #分布均值
sigma=15 #分布标准差
x=mu+sigma*np.random.randn(10000)
print("x:",x.shape)

#直方图的条数
num_bins =50
#绘制直方图,x是直方图的一维数组,bins柱数,density向量是否归一化,alpha透明度
#n是直方图向量,bins返回各个bin的区间范围,patche返回没个bin里包含的数据的list
n,bins,patche=plt.hist(x,bins=num_bins,density=1,color=\'b\',alpha=0.5)

#添加一个最佳拟合和曲线
#pdf(x,mu,sigma)返回参数为mu和sigma的正太分布密度函数在x处的值
y=norm.pdf(bins,mu,sigma)

plt.plot(bins,y,\'r--\')
plt.xlabel(\'Smarts\')
plt.ylabel(\'Probability\')
#在图中添加公式使用latex的语法
plt.title(\'Histogram of IQ: $\mu=100$, $\sigma=15$\')

#调整图像的间距,防止y轴数值与label重合
plt.subplots_adjust(left=0.15)
plt.show()
print("bind:\n",bins)

 4、等值线图

#绘制三维图像
import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#生成数据
delta=0.2
x=np.arange(-3,3,delta)
y=np.arange(-3,3,delta)
X,Y = np.meshgrid(x,y) #生成网格点坐标矩阵
Z=X**2+Y**2
x=X.flatten() #返回一维数组
y=Y.flatten()
z=Z.flatten()
fig=plt.figure(figsize=(12,6)) #figsize设定图片宽高
#cmap指颜色,jet表示蓝-青-黄-红
ax1=fig.add_subplot(121,projection=\'3d\')
ax1.plot_trisurf(x,y,z,cmap=cm.jet, linewidth=0.01)
plt.title("3D")
ax2=fig.add_subplot(122)
#15表示显示等高线的密集程度,数据越大画的等高线越多
cs=ax2.contour(X,Y,Z,15,cmap=\'jet\')
ax2.clabel(cs,inline=True,fontsize=10,fmt=\'%1.1f\')
plt.title("Contour")
plt.show()

 4、三维曲面图

#绘制三维图像+各个轴的投影等高线
from matplotlib import cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

fig=plt.figure(figsize=(8,6))
ax=fig.gca(projection=\'3d\')
#生成三维测试数据
X,Y,Z=axes3d.get_test_data(0.05)
ax.plot_surface(X,Y,Z,rstride=8,cstride=8,alpha=0.3)
cset=ax.contour(X,Y,Z,zdir=\'z\',offset=-100,cmap=cm.coolwarm)
cset=ax.contour(X,Y,Z,zdir=\'x\',offset=-40,cmap=cm.coolwarm)
cset=ax.contour(X,Y,Z,zdir=\'y\',offset=40,cmap=cm.coolwarm)
ax.set_xlabel(\'X\')
ax.set_xlim(-40,40)
ax.set_ylabel(\'Y\')
ax.set_ylim(-40,40)
ax.set_zlabel(\'Z\')
ax.set_zlim(-100,100)
plt.show()

5、条形图

#绘制条形图
import matplotlib.pyplot as plt
import numpy as np
#生成数据
n_groups=5
#平均分和标准差
means_men=(20,35,30,35,27)
std_men=(2,3,4,1,2)
means_women=(25,32,34,20,25)
std_women=(3,5,2,3,3)
#条形图
fig,ax=plt.subplots()
#生成0,1,2,3,……
index=np.arange(n_groups)
bar_width=0.35 #条的宽度
opacity=0.4
error_config={"ecolor":"0.3"}

#条形图的第一类条
rects1=plt.bar(index,means_men,bar_width,alpha=opacity,color=\'b\',yerr=std_men,
error_kw=error_config,label=\'Men\')
#条形图中的第二类条
rects2=plt.bar(index+bar_width,means_women,bar_width,alpha=opacity,color=\'r\',
yerr=std_women,error_kw=error_config,label=\'Women\')
plt.xlabel(\'Group\')
plt.ylabel(\'Scores\')
plt.title(\'Scores by group and gender\')
plt.xticks(index+bar_width,(\'A\',\'B\',\'C\',\'D\',\'E\'))
plt.legend()
#自动调整subplot的参数给指定的填充区
plt.tight_layout()
plt.show() 

 6、饼图

#绘制饼图
import matplotlib.pyplot as plt
#切片将顺时针方向排列并绘制
labels=\'Frogs\',\'Hogs\',\'Dogs\',\'Logs\' #标注
sizes=[15,30,45,10] #大小
colors=[\'yellowgreen\',\'gold\',\'lightskyblue\',\'lightcoral\'] #颜色
#0.1代表第二个块从圆中分离出来
explode=(0,0.1,0,0)
#绘制
plt.pie(sizes,explode=explode,labels=labels,colors=colors,
autopct=\'%1.1f%%\',shadow=True,startangle=90)
plt.axis(\'equal\')
plt.show()

7、气泡图

#绘制气泡图
import matplotlib.pyplot as plt
import pandas as pd
#导入数据
df_data=pd.read_csv(\'D:\iris.csv\')
df_data.head()
#作图
fig,ax=plt.subplots()
#设置气泡图颜色,颜色数组大小必须跟df_data数组大小一致
colors= np.random.rand(df_data[\'SepalLength\'].size)
#创建气泡图SepalLength为x,SepalWidth为y
ax.scatter(df_data[\'SepalLength\'],df_data[\'SepalWidth\'],
s=df_data[\'PetalLength\']*100, #设置气泡的大小
c=colors,alpha=0.6) #设置颜色透明度
ax.set_xlabel(\'SepalLength(cm)\')
ax.set_ylabel(\'SepalWidth(cm)\')
ax.set_title(\'PetalLength(cm)*100\')
#显示网格
ax.grid(True)
fig.tight_layout()
plt.show()

8、图形灰化

from PIL import Image
#读取图片文件
pil_im=Image.open(r\'d:\1.png\')
#转化为灰度图
Pil_im=pil_im.convert(\'L\')
Pil_im

 待续……

 

初始配置:

分类:

技术点:

相关文章: