Python大数据可视化编程实践绘制图表.docx
《Python大数据可视化编程实践绘制图表.docx》由会员分享,可在线阅读,更多相关《Python大数据可视化编程实践绘制图表.docx(17页珍藏版)》请在冰豆网上搜索。
![Python大数据可视化编程实践绘制图表.docx](https://file1.bdocx.com/fileroot1/2023-8/3/af3ec332-5865-4270-a63e-962a0c284e97/af3ec332-5865-4270-a63e-962a0c284e971.gif)
Python大数据可视化编程实践绘制图表
Python数据可视化编程实践-绘制图表
准备工作
打开JupyterNotebook,导入需要的包,并配置好图片交互和中文显示环境:
importpandasaspd
importnumpyasnp
importsys
reload(sys)
sys.setdefaultencoding('utf-8')
importmatplotlibasmpl
importmatplotlib.pyplotasplt
importmatplotlib.cmascm
%matplotlibinline
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
定义图表类型——柱状图、线形图和堆积柱状图
调用figure()方法,创建一个新的图表,接下来的绘图操作都在此图表中进行,参数figsize=(12,6)表示该图表的大小。
调用subplot(231)方法把图表分割成2行3列的网格,1表示图形的标号。
x=[1,2,3,4]
y=[5,4,3,2]
plt.figure(figsize=(12,6))
plt.subplot(231)
plt.plot(x,y)#折线图
plt.subplot(232)
plt.bar(x,y)#垂直柱状图
plt.subplot(233)
plt.barh(x,y)#水平柱状图
plt.subplot(234)
plt.bar(x,y)
y1=[7,8,5,3]
plt.bar(x,y1,bottom=y,color='r')#堆叠柱状图设置参数bottom=y
plt.subplot(235)
plt.boxplot(x)#箱线图
plt.subplot(236)
plt.scatter(x,y)#散点图
plt.show()
具体解释下箱线图中的几个最重要的显示选项。
首先,我们可以添加从箱体延伸出来的箱须来展示数据集合的整个范围。
箱体和箱须主要用于表现一个或多个数据集合中数据的编号,容易对数据进行对比而且易于理解。
在同一个箱线图中可以呈现5种数据。
最小值:
数据集合的最小值。
第二四分位数:
其以下为数据集合中较低的25%数据。
中值:
数据集合的中值
第三四分位数:
其以上为数据集合中较高的25%数据。
最大值:
给定数据集合的最大值。
dataset=[113,115,119,121,124,
124,125,126,126,126,
127,127,128,129,130,
130,131,132,133,136]
plt.figure(figsize=(10,6))
plt.subplot(121)
plt.boxplot(dataset,vert=False)
plt.subplot(122)
plt.hist(dataset)
plt.show()
我们用同一个数据集合来绘制箱线图和直方图,观察两种图表在数据展现上的差异。
左图呈现了五个统计数据,右图展示了数据集合在给定范围内的分组情况。
简单的正弦图和余弦图
我们对从-Pi到Pi之间具有相同线性距离的256个点来计算正弦值和余弦值,然后把sin(x)值和cos(x)值在用以图表中绘制出来。
x=np.linspace(-np.pi,np.pi,256,endpoint=True)
y=np.cos(x)
y1=np.sin(x)
plt.figure(figsize=(10,6))
plt.plot(x,y)
plt.plot(x,y1)
plt.title("Functions$\sin$and$\cos$")#设置图标题
plt.xlim(-3.0,3.0)#设置x轴范围
plt.ylim(-1.0,1.0)#设置y轴范围
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])#用希腊字母标注x轴标签
plt.yticks([-1,0,+1],
[r'$-1$',r'$0$',r'$+1$'])
plt.show()
设置坐标轴长度和范围
如果不实用axis()或者其他参数设置,matplotlib会自动使用最小值,刚好可以让我们在一个图中看到所有的数据点。
调用autoscale()方法,会以坐标轴的最佳大小适应数据的显示。
axis()里面的值分别表示坐标轴上xmin、xmax、ymin、ymax
axhline()表示绘制了一条y=0的水平线
axvline()表示绘制了一条x=0的垂直线
axhline(4)表示绘制了一条y=4的水平线
l=[-1,1,-10,10]
plt.axis(l)
plt.axhline()
plt.axvline()
plt.axhline(4)
设置图表的线型、属性和格式化字符串
常见的线条样式:
-直线
--虚线
-.-.形式
:
细小虚线
常见的点样式:
s--方形
h--六角形
H--六角形
*--星号
+--加好
x--x型
d--菱形
D--菱形
p--五角形
常见的颜色样式:
c-cyan--青色
r-red--红色
m-magente--品红
g-green--绿色
b-blue--蓝色
y-yellow--黄色
k-black--黑色
w-white--白色
#plot(x轴数据,y轴数据,展现形式)
x=[1,2,3,4,8]
y=[5,7,2,1,5]
plt.plot(x,y,'-',color='g',linewidth=0.8)
plt.plot(x,y,'*',color='r')#散点图
plt.show()
设置刻度、刻度标签和网格
刻度是图形的一部分,由刻度定位器(指定刻度所在的位置)和刻度格式器(指定刻度显示的样式)组成。
刻度有主刻度和次刻度,默认次刻度不显示。
locator_params()方法控制刻度定位器,可以控制刻度的数目。
plt.figure(figsize=(10,6))
#获取当前坐标
ax=plt.gca()
#设置紧凑视图,设置刻度间隔最大为10
ax.locator_params(tight=True,nbins=10)
#生成100个正态分布值
ax.plot(np.random.normal(10,.1,100))
plt.show()
使用dates模块的一个例子来说明刻度格式器的配置。
刻度格式器规定了值的显示方式。
importdatetime
fig=plt.figure(figsize=(10,6))
#获取当前的坐标轴
ax=plt.gca()
#设置一些日期区间
start=datetime.datetime(2013,01,01)
stop=datetime.datetime(2013,12,31)
delta=datetime.timedelta(days=1)
#转换日期
dates=mpl.dates.drange(start,stop,delta)
#产生一些随机值
values=np.random.rand(len(dates))
ax=plt.gca()
#用日期值画图
ax.plot_date(dates,values,linestyle='-',marker='')
#指定格式
date_format=mpl.dates.DateFormatter('%Y-%m-%d')
#应用格式
ax.xaxis.set_major_formatter(date_format)
#自动格式日期标签
fig.autofmt_xdate()
plt.show()
添加图例和注解
图例和注解清洗连贯地解释了数据图表的内容。
通过给给个plot添加一个关于所显示数据的简短描述,能让观察者更容易理解。
在每个plot中指定了一个字符串标签(label),这样legend()会把它们添加到图例框中。
通过loc参数确定图例框的位置。
annotate()可以为xy坐标位置的数据点添加字符串描述。
通过设置xycoord='data',可以指定注解和数据使用相同的坐标系,注解文本的起始位置通过xytext指定。
箭头由xytext指向xy坐标位置。
arrowstyle指定了箭头风格。
plt.figure(figsize=(10,6))
#生成不同正态分布值
x1=np.random.normal(30,3,100)
x2=np.random.normal(20,2,100)
x3=np.random.normal(10,3,100)
#在同张画布里画3条线
plt.plot(x1,label='plot')
plt.plot(x2,label='2ndplot')
plt.plot(x3,label='3ndplot')
#生成图例框
plt.legend(bbox_to_anchor=(0.,1.02,1.,.102),loc=3,ncol=3,mode="expand",borderaxespad=0.)
#注解重要值
plt.annotate("Importantvalue:
(55,20)",(55,20),xycoords='data',xytext=(5,38),arrowprops=dict(arrowstyle='->'))
plt.show()
移动轴线到图中央
轴线定义了数据区域的边界,把坐标轴刻度标记连接起来。
一共有四个轴线,可以把它们放置在任何位置。
默认情况下,它们被放置在坐标轴的边界。
为了把轴线移到图中央,需要把其中两个轴线隐藏起来(设置color为none)。
然后,移动另外两个到坐标(0,0)。
坐标为数据空间坐标。
x=np.linspace(-np.pi,np.pi,500,endpoint=True)
y=np.sin(x)
plt.plot(x,y)
ax=plt.gca()
ax.spines['right'].set_color('none')#隐藏右边的轴线
ax.spines['top'].set_color('none')#隐藏顶端的轴线
ax.spines['bottom'].set_position(('data',0))#移动底端的轴线到(0,0)
ax.spines['left'].set_position(('data',0))#移动左端的轴线到(0,0)
ax.xaxis.set_ticks_position('bottom')#移动底端的刻度到x轴
ax.yaxis.set_ticks_position('left')#移动左侧的刻度到x轴
plt.show()
绘制直方图
直方图被用于可视化数据的分布估计。
表示一定间隔下数据点频率的垂直矩阵称为bin。
bin以固定的间隔创建,因此直方图的总面积等于数据点的数量。
直方图可以显示数据的相对频率,而不是使用数据的绝对值。
在这种情况下,总面积等于1。
mu=100
sigma=15
x=np.random.normal(mu,sigma,10000)
ax=plt.gca()
ax.hist(x,bins=35,color='r',normed=True)#normed=True,直方图的值将进行归一化处理,形成概率密度。
默认值为False
ax.set_xlabel('值')
ax.set_ylabel('频率')
ax.set_title(r'$\mathrm{Histogram:
}\\mu=%d,\\sigma=%d$'%(mu,sigma))
plt.show()
绘制误差条形图
误差条可以用来可视化数据集中的测量不确定度或者指出错误。
经常使用到的参数:
xerr和yerr:
用于在柱状图上生成误差条。
width:
给定误差条的宽度,默认值是0.8.
bottom:
如果指定了bottom,其值会加到高度中,默认值为None。
edgecolor:
给定误差条边界颜色。
ecolor:
指定误差条的颜色。
linewidth:
误差条边界宽度,可以设为None(默认值)和0(此时误差条边界将不显示出来)
orientation:
有vertical和horizontal两个值。
x=np.arange(0,10,1)
y=np.log(x)
xe=0.1*np.abs(np.random.randn(len(y)))
plt.bar(x,y,yerr=xe,width=0.4,align='center',ecolor='r',color='cyan',label='experiment#1')
plt.xlabel('#measurement')
plt.ylabel('Measuredvalues')
plt.title('Measurements')
plt.legend(loc='upperleft')
plt.show()
绘制饼图
饼图显示的数据集合加起来必须等于100%,否则它就是无意义的、无效的。
饼图描述数值的比例关系,其中每个扇区的弧长大小为其所表示的数量的比例。
饼图的缺点:
1.难以对数量进行比较。
2.以特定角度的方式和一定颜色的扇形展示数据,会使我们的感觉有倾向性,从而影响我们对于所呈现数据得到的结论。
plt.figure(figsize=(6,6))
ax=plt.axes([0.1,0.1,0.8,0.8])
labels='Spring','Summer','Autumn','Winter'
#饼图的每部分定义为x/sum(x),或者为xifsum(x)<=1
x=[15,30,45,10]
#给定一个分裂序列,每一个元素表示每个圆弧间偏移量,为半径的百分比
explode=(0.1,0.1,0.1,0.1)
#如果没有指定startangle,扇区将从x轴开始逆时针排列,如果指定的值为90,饼图将从y轴开始
#autpct参数用来格式化绘制在圆弧中的标签
plt.pie(x,explode=explode,labels=labels,autopct='%1.1f%%',startangle=67)
plt.title('Rainydaysbyseason')
plt.show()
绘制带填充区域的图表
对曲线间或者曲线下面的区域填充颜色,这对我们理解给定的特定信息是非常有必要的。
x=np.arange(0.0,2,0.01)
y1=np.sin(2*np.pi*x)
y2=1.2*np.sin(4*np.pi*x)
fig=plt.figure(figsize=(10,6))
ax=plt.gca()
#绘制出两个信号的图形
ax.plot(x,y1,x,y2,color='black')
#fill_between()方法使用x为定位点选取y值(y1,y2),用where参数指定条件来填充曲线,where参数接手布尔值(可以是表达式)
ax.fill_between(x,y1,y2,where=y2>=y1,facecolor='darkblue',interpolate=True)
ax.fill_between(x,y1,y2,where=y2<=y1,facecolor='deeppink',interpolate=True)
ax.set_title('filledbetween')
plt.show()
绘制带彩色标记的散点图
散点图显示两组数据的值。
散点图可以作为更高级的多维数据可视化的基础,比如绘制散点图矩阵。
散点图通常在应用拟合回归之前绘制,用来识别两个变量间的关联。
x=np.random.randn(1000)
#y1为随机值,与x不相关
y1=np.random.randn(len(x))
#y2与x强相关
y2=1.2+np.exp(x)
fig=plt.figure(figsize=(10,6))
ax1=plt.subplot(121)
#marker参数用来设置点状标记(默认为circle),alpha参数表示透明度,edgecolors参数表示标记的边界颜色,label参数用于图例框
plt.scatter(x,y1,color='indigo',alpha=0.3,edgecolors='white',label='nocorrel')
plt.xlabel('nocorrelation')
plt.grid(True)
plt.legend()
ax2=plt.subplot(122,sharey=ax1,sharex=ax1)
plt.scatter(x,y2,color='green',alpha=0.3,edgecolor='grey',label='correl')
plt.xlabel('strongcorrelation')
plt.grid(True)
plt.legend()
plt.show()