为方便不同读者阅读,这里把python的代码解释也一起补充上来,完整的notebook欢迎关注微信公众号 数据分析螺丝钉 回复关键词 python可视化领取,重点是可视化的思路,用excel或者其他工具也能实现
步骤:需要先经过一轮分析,然后再改进可视化图表
目标:可以让人一眼看出问题,不需要过多的解释
常见方法
0. 颜色区分
plt.plot(x,y, color='blue')
1. 线条粗细
将重点线条的粗细设置得比其他线条更粗,可以有效地使其脱颖而出。
plt.plot(x, y, linewidth=3) # 将重点线条的宽度设置为3
2. 线条样式
改变线条的样式(例如,使用虚线或点划线)也可以帮助区分重点线条。
plt.plot(x, y, linestyle='--') # 将重点线条设置为虚线
3. 添加标签和注释
在图表中直接为重点线条添加注释或者在图例中突出显示可以帮助观众快速识别重点信息。
plt.text(x_position, y_position, '重点', fontsize=12) # 在图表中添加文本注释
4. 线条标记
在重点线条上使用标记(如圆圈、方块、星号等)来进一步区分。
plt.plot(x, y, marker='o') # 使用圆圈标记重点线条的每个数据点
5. 高亮背景区域
通过高亮显示与重点线条相关的背景区域,可以吸引观众的注意力。
plt.fill_between(x, y1, y2, color='lightgrey', alpha=0.5) # 高亮背景区域
6. 使用阴影或光晕
给线条增加阴影或者光晕效果,使其在视觉上更加突出。
数据准备
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 设置随机数种子确保可复现性
np.random.seed(42)
base_sales = np.linspace(100, 130, 12) # 创建一个基础的平缓销售趋势
sales_data = pd.DataFrame({'Product A': np.random.randint(80, 200, size=12), # 保持产品A的波动'Product B': np.random.randint(80, 200, size=12), # 'Product C': base_sales + np.random.normal(0, 5, 12), #添加较小的随机波动'Product D': base_sales + np.random.normal(0, 5, 12)
}, index=months)
普通图
例如:这是一个常见的产品销售月趋势折线图,分别有四种不同的颜色
# 绘制趋势图
plt.figure(figsize=(10, 6))
colors = ['gray', 'bule', 'red', 'black'] # 使用不同的颜色
for product, color in zip(sales_data.columns, colors):plt.plot(sales_data.index, sales_data[product], color=color, marker='o', linestyle='--', label=product)
产品A是战略产品负责人需要让你重点分析,你可能可以看到产品A在5月和9月有两个高点,但是仔细看多个产品的耦合比较多,很难看出来产品A每个月怎么变化的,甚至产品B反而更突出了,这时候需要改进一下图表的可视化
颜色区分
在图表中突出重点一个基本的逻辑可以用颜色区分
# 先绘制其他产品的销售趋势,使用浅灰色
for product in ['Product B', 'Product C', 'Product D']:plt.plot(sales_data.index, sales_data[product], color='lightgray', linestyle='--', label='_nolegend_')
# 突出显示产品A的销售趋势,使用深色
plt.plot(sales_data.index, sales_data['Product A'], color='blue', marker='.', label='Product A')
你要讲产品A,那就弱化其他产品,单独给它标识成一个深的颜色,这样对比就能突出产品A的业务变化趋势,再去讲原因会让人容易看出一些信息,5、9月份销售大幅度增加,但接着如果你又写了一些文字解释 (原因是5月办了一场A活动、9月办了B活动,再分别描述)这时候还是会显得不够直观
这时候我们把原因也标注上去
# 标注业务原因
marketing_events = {'May': 'MarketingA', 'Sep': 'MarketingB'}
for month, event in marketing_events.items():x_pos = months.index(month)y_pos = sales_data.loc[month, 'Product A']plt.text(x_pos, y_pos, event, fontsize=12, verticalalignment='bottom', horizontalalignment='center')
可以让人一目了然,分别为marktingA和MarketingB,通过标注原因在图上其实分析师不需要太多的描述,大家一眼能看到你想表达什么这时候叫突出重点
线条粗细
当线条变粗的时候,其他颜色的线条没这么突出了,不过但是如果颜色很深的话还是建议弱化其他颜色,突出粗的线条,这里把产品B的颜色改成浅蓝色了。
背景高亮
这里要稍微注意一下要在线的附近做背景高亮,否则填满整个图也就看不出重点了
highlight_margin = sales_data['Product A'] * 0.05 # 计算高亮范围的宽度plt.fill_between(sales_data.index, sales_data['Product A'] - highlight_margin, sales_data['Product A'] + highlight_margin, color='yellow', alpha=0.3) # 在这个范围内填充颜色
高亮后黄色的背景也很容易吸引读者看到产品A
总结
一个简单的折线图也需要了解技巧和方法,时间久了就可以比别人更进一步