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

三维地理可视化 Python python三维数据可视化_python 3d大数据可视化

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

三维地理可视化 Python python三维数据可视化_python 3d大数据可视化_02

matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库。它最初由John D.Hunter(JDH)创建,目前由一个庞大的开发人员团队维护。它非常适合创建出版物上用的图表。

虽然还有其它的Python可视化库,matplotlib却是使用最广泛的,并且它和其它生态工具配合也非常完美。我认为,可以使用它作为默认的可视化工具。

#初始配置

importnumpy as npimportpandas as pdimportmatplotlib as mplimportmatplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus']=Falseimportseaborn as snsimport warnings; warnings.filterwarnings(action='once')

large= 22; med = 16; small = 12params= {'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 inlineprint(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

待续……

初始配置: