Task06 - 场景案例显神通 - Datawhale 12月组队

本文详细介绍了数据可视化的多种图表类型,包括折线图、面积图、箱型图、小提琴图、棒棒糖图、雷达图、平行坐标图、棒棒糖图和圆形柱状图等,讲解了各自适用的场景、注意事项以及Python的实现方法,旨在帮助读者更好地理解和应用这些图表来展示数据趋势、分布、相关性和组成关系。
摘要由CSDN通过智能技术生成

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

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

线图常用来呈现时间趋势的变化(时间序列),所以X轴通常代表某个时间间隔。

注意事项

X轴的数据必须是有序的
是否需要截断Y轴,即Y轴是否必须要从0点开始?
如果要比较两个或多个不同的变量的变化趋势,不要使用双Y轴图表
小心有很多线条的线图(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()


output_6_0
output_6_0
866×584 51.5 KB


突出某一重点的多线图
下面是正常的多线图:
需要注意的是,这里只有5条线,尚能看清楚,但是如果如果超过5条,10条甚至更多的时候,花在一张图上基本看不到什么有效信息。这时候我们可以采取两种办法:

还是在一张图上,突出其中一条或两条线,其他都是作为背景的灰色
几条线画几个子图

导入包

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()

output_9_0

下面是突出某一重点的多线图:
(突出PA为橘色,其他的都为灰色)

导入包

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:]:
num+=1
name=list(df)[num]
if name != ‘PA’:
plt.text(2017.02, i, name, horizontalalignment=‘left’, size=‘small’, color=‘grey’)

特殊处理PA

plt.text(2017.02, df.PA.tail(1), ‘PA’, horizontalalignment=‘left’, size=‘small’, color=‘orange’)

添加图的标题和XY轴的标签

plt.title(“Evolution of PA vs other states”, loc=‘left’, fontsize=12, fontweight=0, color=‘orange’)
plt.xlabel(“Year”)
plt.ylabel(“DrugReports”)
Text(0, 0.5, ‘DrugReports’)

output_11_1
output_11_1
599×581 22.5 KB


多子图
一张图显示多条线过于拥挤的时候,可以分成多个小的子图来显示。
多个子图对比的时候,需要注意,X轴和Y轴的刻度大小需要严格一致,不然会带来误导。

导入包

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

导入数据集并转成方便作图的格式

Dataset = pd.read_csv(‘data/Drugs.csv’)
group = Dataset.groupby

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值