通过增强散点图讲述完整的故事
概述:随着需求场景的发展,散点图是最受欢迎的。它们很快揭示了两个(或更多)变量之间的关系。如果做得好,散点图可以快速向观众传达一个完整的故事。
心中的目标是让你的听众对自己说……
我们明白现在该做什么了……
理想情况下,您的散点图将在瞬间引发上述认识。本文将展示如何将您的可视化从简单的散点图转变为完整的故事。这是 Seaborn 版本。配套文章将在基本 Matplotlib 和 Stata 中显示相同的内容。
你的工作是帮助决定你的公司应该购买什么车辆,因为它希望扩大其公司车队。此外1978 年是我们有数据的年份。
我经常用作示例的三个数据集本文重点介绍了三个数据集,我将它们作为自己或他人的示例。这些数据告诉我们大约 74 辆车。
我们知道每辆车的品牌、价格、效率 (mpg) 和其他因素。
我们公司已经确定最低效率要求是每加仑 16 英里,但我们的最佳效率标准是每加仑 29 英里。分析任务是找到高于最佳效率标准的最具成本效益的车辆,同时重量也最大(将是最重型的)
入门
最容易查看的图是简单的散点图。在 Seaborn 的协助下,如下所示:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_stata(' http://www.stata-press.com/data/r15/auto2.dta' )
plt.figure() ax = sns.scatterplot(data=df,
x="weight", y="mpg",
color = '#060b3f')
plt.show()

尺寸、比例、尺寸和标签
稍微修饰一下这种视觉效果的一些首要任务是:
更改尺寸(更水平以适合我们的目标 8.5 x 11 in page 报告。
指定将减少混乱的比例和刻度线。
添加细微的网格线以帮助读者将各个数据点与其在 y 轴上的位置联系起来。
并更新轴标签以提供更好的信息。
import numpy as np
plt.figure(figsize = (15,6))
ax = sns.scatterplot(data=df,
x="weight",
y="mpg",
color = '#060b3f')
ax.set(xlabel='Weight ( lbs).', ylabel='里程 (mpg).')
ax.yaxis.grid(True, color = '#CCCCFF')
plt.xticks(np.arange(2000, 6000, 1000))
plt.yticks(np .arange(10, 45, 10))
plt.show()

设置上下文(可选)
Seaborn 中的一个可用功能是能够设置您的上下文。上下文,粗略地说,指定了你打算展示你的视觉效果的地方。
例如,您可能希望将您的视觉效果放在论文、笔记本、会议演讲或海报中。
虽然很多人会认为这个是可选的,但我经常喜欢为海报设置上下文。对于任何上下文,我发现它最具可读性。
plt.figure(figsize = (15,6))
sns.set_context(context='poster')
ax = sns.scatterplot(data=df,
x="weight",
y="mpg",
color = '#060b3f' )
ax.yaxis.grid(True, color = '#CCCCFF')
ax.set(xlabel='Weight (lbs).', ylabel='Mileage (mpg).')
plt.xticks(np.arange(2000, 6000, 1000))
plt.yticks(np.arange(10, 45, 10))
plt.show()

添加参考线
这就是商店展示自己的地方。为了勾勒出我们故事的轮廓,我们可以在图形中添加一些额外的信息。我们可以添加与我们公司效率标准相关的信息。
这里sns.lineplot()让我们添加水平参考线,ax.text()让我们注释这些参考线。
plt.figure(figsize = (15,6))
sns.lineplot(data=df, x="weight",
y=[29]*len(df), color = 'green')
ax = sns.scatterplot(data =df,
x="weight",
y="mpg",
color = '#060b3f')
sns.lineplot(data=df, x="weight",
y=[16]*len(df), color = ' red')
ax.text(3200, 30,
'绿线表示最佳效率标准。',
color = 'green')
ax.text(1800, 15,
'红线表示最低效率要求。',
color = 'red' )
ax.set(xlabel='重量(磅)。',
ylabel='里程 (mpg).')
ax.yaxis.grid(True,
颜色 = '#CCCCFF')
plt.xticks(np.arange(2000, 6000, 1000))
plt.yticks(np.arange(10, 45, 10))
plt.show()

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize = (15,6))
sns.lineplot(data=df, x="weight",
y=[29]*len(df), color='green')
ax = sns.scatterplot(data =df,
x="weight",
y="mpg",
color='#060b3f')
sns.lineplot(data=df, x="weight",
y=[16]*len(df), color='red')
ax.text(3600, 30,
'绿线表示最佳效率标准。',
color='green')
ax.text(1800, 15,
'红线表示最低效率要求。',
color='red' )
ax.text(2250, 32.2,
'丰田卡罗拉 (31mpg 2200lbs)',
color = 'green',size = '14')
ax.text(2250, 30.8,
'最优价格最低',
color = 'green', size = '14')
ax.set(xlabel='Weight (lbs).',
ylabel='Mileage (mpg).' )
ax.plot(2200, 31,
'g', marker='$\\bigoplus$', markersize=15)
ax.yaxis.grid(True, color = '#CCCCFF')
plt.suptitle("The 'Best Value' For Fleet Purchases",
fontsize=20)
plt.title("初步分析",
fontsize=15)
plt.xticks(np.arange(2000, 6000, 1000))
plt.yticks(np.arange(10, 45, 10))
plt.show()

网友评论