欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据可视化

程序员文章站 2024-02-12 18:17:04
...

设置绘图可以在jupyter notebook显示

# 设置在notebook中直接展示图形输出
%matplotlib inline  
# 设置图片清晰度
%config InlineBackend.figure_format = 'retina'  

可以使用下面三种方法绘图

  1. 直接使用DataFrame绘图,比如 iris.plot() iris是个DataFrame数据,dataframe的绘图也是基于matplotlib
  2. 导入import matplotlib.pyplot as pltmatplotlib作图工具包
  3. seaborn 数据可视化包

常见的绘图有:

  • 条形图
  • 绘制多图
  • 饼图
  • 散点图
  • 直方图

matplotlib是什么

matplotlib是Python编程语言的一个绘图库,与Python深度集成,风格与Matlab接近

绘图基础

绘图一般使用 matplotlib包中的pyplot
因此 通常我们这么导入

import matplotlib.pyplot as plt

设置在notebook中直接展示图形输出

设置清晰度
%matplotlib inline  
# 设置图片清晰度
%config InlineBackend.figure_format = 'retina'  

plt.plot()是常用的绘图函数
plt.show()显示绘图

# 设置横坐标x的取值范围
x = np.arange(0, 5, 0.1);
# 根据x的值,通过sin()函数,获取y的值
y = np.sin(x)
# 使用matplotlib中的plot绘图函数
plt.plot(x, y)  
# 添加标题、x轴和y轴的名称
plt.title("sine function") # 标题
plt.xlabel("x value") # x坐标
plt.ylabel("y value") # y坐标
# 显示图像
plt.show()

我们可以控制图形的每一个细节
"b"代表blue,指定蓝色,"-"指定线的种类
linewidth指定线的粗细

plt.plot(x, y, "b-", linewidth=2.0) 

使用marker参数给线加标记符号
plt.plot(x,y, color = "blue", marker = ".")
设定xy轴的区间
plt.axis([0, 5, -1.1, 1.1])
等价于plt.xlim(0,5) 加上 plt.ylim(-1.1, 1.1)
显示网格
plt.grid(True)
加上文字描述
plt.text(3.1, 0.3, 'sin functoin')

在同一个坐标系位置多个图
各个图使用逗号隔开
下面这个例子展示了,不同选项对图形产生的不同效果

t = np.arange(0., 5., 0.2)dzb
在[0,5]的区间上分别绘制了 y=x, y=x^2, 和y=x^3 
"r"表示red红色,“--”表示虚线,
“b”表示blue蓝色,“s”表示square正方形,
“g”表示green绿色,“^”表示三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')

穿插DataFrame方法

sort_values排序方法,by参数指定根据哪个属性排序
top10 = df.groupby('name')['ext price'].agg(['sum', 'count']).reset_index().sort_values(by='sum', ascending=False)[:10]
rename方法,可以对变量重新命名 inplace = True表示对源数据进行修改
top10.rename(columns={'name': 'Name', 'sum': 'Sales', 'count': 'Purchases'}, inplace=True)

绘制条形图plt.bar

绘图风格设置

# 使用ggplot风格的作图
plt.style.use('ggplot')
# 使用available属性查看可用的风格
plt.style.available

绘制条形图的核心方法

plt.barh 绘制水平方向的条形图,
plt.bar绘制垂直方向的直方图
plt.barh(np.arange(10), top10.Sales, height=0.5)

使用 ticks修改坐标的刻度 将数字改为有意义的字符串

plt.yticks(np.arange(10), top10.Name)
plt.xticks([0, 20000, 40000, 60000, 80000, 100000, 120000, 140000], 
           ['$0k', '$20k', '$40k', '$60k', '$80k', '$100k', '$120k', '$140k'])

绘制多图fig.add_subplot

在同一幅图中,分别绘制图,不共用坐标系。

  1. 设置画布大小plt.figure(figsize= 并返回画布对象
    fig = plt.figure(figsize=(12,5))
  2. 给画图加上标题, fontsize=14 字体大小, fontweight='bold' 加粗
    fig.suptitle('Sales Analysis', fontsize=14, fontweight='bold')
  3. 添加第一个子图fig.add_subplot() 其中121表示 1行2列第一个图
    ax1 = fig.add_subplot(121) #会返回这个子图
    添加之后 默认后续操作都是在子图上进行的
plt.barh(np.arange(10), top10.Sales, height=0.5, tick_label=top10.Name)
plt.title('Revenue')
# 加入平均销售额,用一条垂直的虚线表示
revenue_average = top10.Sales.mean()
plt.axvline(x=revenue_average, color='b', linestyle='--', linewidth=1)

axvline 绘制垂直线 参数x表示在x轴上的位置,

  1. 添加第二个图
ax2 = fig.add_subplot(122) #表示1行2列第二个图
plt.barh(np.arange(10), top10.Purchases, height=0.5)
plt.title('Units')
# 不显示y轴刻度
plt.yticks(visible=False)

# 加入平均交易个数,用一条垂直的虚线表示
purchases_average = top10.Purchases.mean()
plt.axvline(x=purchases_average, color='b', linestyle='--', linewidth=1)

plt.show()

饼图plt.pie

不需要xy轴,绘制的数据,标签名,autopct自动显示百分比

# pie绘制饼图,labels设置每个区域的标签名,autopct 显示所占比例
plt.pie(top10.Sales, labels=top10.Name, autopct='%1.1f%%')
# 调整轴的比例
plt.axis('equal')
plt.show()

散点图plt.scatter

scatter 绘制散点图,x,y设置x轴和y轴对应的数据,s设置点的大小
plt.scatter(x=top10.Purchases, y=top10.Sales, s=50)

直方图plt.hist

hist绘制直方图,bins设置区间个数 rwidth表示每个条的宽度 默认为1
plt.hist(df['ext price'], bins=20, rwidth=0.9)

设置x轴区间范围

plt.xlim(-200, 5000)

Python数据可视化模块—Seaborn

  • Seaborn是基于matplotlib产生的一个模块,专攻于统计可视化
  • 可以和pandas进行无缝链接,初学者使用Seaborn更容易上手
  • Seaborn和matplotlib的关系类似于pandas和numpy的关系。
# 导入seaborn包, 简写成sns
import seaborn as sn

使用sns作图

sns通用绘图

sns.FacetGrid().map()
facetGrid对应的是数据,map将前面的数据映射成图表。 这是比较通用的做法。
使用seaborn做图, 用品种划分数据
FacetGrid对象是用来连接pandas DataFrame到一个有着特别结构的matplotlib图像
具体来说,FacetGrid是用来画一组固定的关系给定某个变量的某个值
FacetGrid中的hue参数指明划分数据的变量,这里是species(品种)

sns.FacetGrid(iris, hue="species", size=8) \
   .map(plt.scatter, "petal_length", "petal_width").add_legend()

sns绘制直方图

col='Survived'指定将图片在一行中做出生还和罹难与年龄的关系图

sns.FacetGrid(titanic_df, col='Survived').
map(plt.hist, 'Age', bins=20, normed=True)

sns绘制箱图

sns.boxplot()
sns.boxplot(data=iris, x="species", y="sepal_width")

sns各个变量之间的关系图

sns.pairplot()
sns.pairplot(iris, hue="species")

sns绘制条形图

sns.barplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)

其中ci=None表示不显示置信区间

绘制折线图:使用sns.pointplot

sns.pointplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)