数据可视化专题之Matplotlib——场景案例


数据可视化的图表种类繁多,各式各样,因此我们需要掌握如何在特定场景下使用特定的图表。
数据可视化是为业务目的服务的,好的可视化图表可以起到清晰准确反映业务结果的目的,在选择使用何种图表时,通常我们需要首先考虑你想通过可视化阐述什么样的故事,受众是谁,以及打算如何分析结果。
关于如何利用数据创造出吸引人的、信息量大的、有说服力的故事,进而达到有效沟通的目的,可以进一步阅读这本书《用数据讲故事》学习。
本章将介绍不同场景适合的可视化图表类型,使用注意事项,以及如何用现成的绘图接口来呈现。
我们将常见的场景分为5大类:
1)展示趋势变化(Evolution)
2)展示分布关系(Distribution)
3)展示相关关系(Correlation)
4)展示排序信息(Ranking)
5)展示组成关系(Part of a whole)


一、展示趋势变化(Evolution)
1.1 折线图 - Line chart

线图(也叫折线图)是众多图表中的基本图形。它由一系列的数据点和连接这些数据点的线段组成。
它的形式和散点图类似,区别是
①线图的数据点通常是有序排列的(一般按X轴的值顺序)
②线图多了线段连接数据点。
③线图是描述趋势变化的,散点图是描述两个变量的相关性的。
线图常用来呈现时间趋势的变化(时间序列),所以X轴通常代表某个时间间隔。

注意事项

  1. X轴的数据必须是有序的
  2. 是否需要截断Y轴,即Y轴是否必须要从0点开始?
  3. 如果要比较两个或多个不同的变量的变化趋势,不要使用双Y轴图表
  4. 小心有很多线条的线图(spaghetti chart-意大利面条图),太多的线条会让图表变得混乱、无法阅读;建议使用多子图形式或重点突出某一个种类

线图可以直接用pyplot.plot函数绘制,只输入一列数的话会默认为Y轴的值,然后自动生成X轴;亦可输入两列数分别代表X轴和Y轴。
具体用法和常用参数见下面参考代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 创建数据,分别对应X轴和Y轴,注意X轴要是有序排列的
df=pd.DataFrame({
   'xdata': range(1,101), 'ydata': np.random.randn(100) })

# 绘图
plt.style.use('seaborn-darkgrid') # 也可以选择其他的风格式样 seaborn-whitegrid
plt.figure(figsize=(15, 10)) # 设置画布大小

# color:    控制线条颜色,red/skyblue/blue 等
# alpha:    控制线条透明度
# linestyle:控制线条式样,'--', '-', '-.', ':' 等
# linewidth:控制线条粗细大小
plt.plot( 'xdata', 'ydata', data=df, color='blue',alpha=0.3, linestyle='-.', linewidth=2, label='linestyle')
plt.legend(loc='upper left', frameon=False) # 设置标签
plt.title('Basic line plot') # 设置标题
plt.show()
# 导入包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 导入数据集并转成方便作图的格式
Dataset = pd.read_csv('data/Drugs.csv')
group = Dataset.groupby(['YYYY','State']).agg('sum').reset_index()
df = group.pivot(index='YYYY', columns='State', values='DrugReports').reset_index()

# 设定式样
plt.style.use('seaborn-darkgrid')
 
# 创建调色板, 色卡用来控制每条线的颜色
palette = plt.get_cmap('Set1')

# 绘图
plt.figure(figsize=(15, 7))
num=0
for column in df.drop('YYYY', axis=1):
    num += 1
    plt.plot(df['YYYY'], df[column], marker='', color=palette(num), linewidth=2, alpha=0.9, label=column)
    
plt.legend(loc=2, ncol=2)
plt.title("Multiple line plot", loc='center', fontsize=12, fontweight=0, color='orange')
plt.xlabel("year")
plt.ylabel("DrugReports")
plt.show()
# 导入包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 导入数据集并转成方便作图的格式
Dataset = pd.read_csv('data/Drugs.csv')
group = Dataset.groupby(['YYYY','State']).agg('sum').reset_index()
df = group.pivot(index='YYYY', columns='State', values='DrugReports').reset_index()

# 设定式样
plt.style.use('seaborn-darkgrid')
 
# 绘图
plt.figure(figsize=(10, 10), dpi=70)
#  所有的线条都画成灰色
for column in df.drop('YYYY', axis=1):
    plt.plot(df['YYYY'], df[column], marker='', color='grey', linewidth=1, alpha=0.4)
# PA的特殊处理,用橘色且加粗
plt.plot(df['YYYY'], df['PA'], marker='', color='orange', linewidth=4, alpha=0.7)
 
# 设定每条线的label的位置,其他的都为灰色,PA的为橘色
num=0
for i in df.values[7]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值