随着时间的推移,数据可视化技术也在不断进化。近期,出现了比以往任何时候都要优秀的可视化技术。每天,人们都在发明自己的可视化方法,其终极目标是:提升数据背后的故事性。毫无疑问,高级数据可视化技术需要更多的技能和努力,但这些图表总是值得投入的。得益于人脑的发展,以前需要多行代码实现的功能,现在可以通过一行函数调用来完成。这最好地解释了说法:数据可视化技术随着时间而进化。
棒棒糖图由一个条形和一个顶部的圆圈组成,类似于顶部有糖果的棒棒糖。这种图表用于比较不同类别的类别,因此它是可视化类别间比较的一个强大工具。但是,它与条形图有何不同呢?首先,当顶部有一个填充圆圈时,它使得识别值变得更容易。其次,当有超过10个类别时,条形图会变得杂乱无章,对于最终用户来说难以阅读。而棒棒糖图使用细条形,从而为更多类别提供了更大的空间。同样,可以在类别数量多时水平绘制棒棒糖图。
棒棒糖图也用于显示类别间的排名。例如,如果想根据燃油里程比较20种不同的汽车型号,棒棒糖图在这种情况下可以高效地完成任务并提供最小的图表。
棒棒糖图可以使用Python中的Matplotlib库高效绘制。Matplotlib库提供了一个方便的函数.stem()
,专门用于构建棒棒糖图。让看看它是如何工作的。
import matplotlib.pyplot as plt
import numpy as np
x = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y = np.linspace(1, (np.log(0.2 * np.pi)), 10)
plt.stem(x, y, use_line_collection=True)
plt.show()
在plt.stem()
中,设置了参数use_line_collection
为True。这将在图表中添加单独的线条作为LineCollection。如果不指定这个参数,它将给出一个用户警告,并提醒设置这个参数为True。这提高了茎叶图的性能。
Python代码:
Basic Lollipop Chart (Source – PC)
通过向.stem()
添加参数,可以提高棒棒糖图的可读性和数据描述能力。以下是一些可以进行的改进:
import matplotlib.pyplot as plt
import numpy as np
x = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y = np.linspace(1, (np.log(0.2 * np.pi)), 10)
plt.stem(x, y, markerfmt='s', linefmt='--', basefmt=':', use_line_collection=True)
plt.show()
执行此代码后,得到:
带有额外参数的棒棒糖图(来源 – 个人电脑)
在这里,进行了三项修改:
markerfmt='s'
,这将棒棒糖图的填充圆圈替换为正方形(s指的是正方形)。linefmt='--'
,这将棒棒糖图的茎替换为双划线。(--指的是双划线)basefmt=':'
,这将棒棒糖图的基线替换为冒号。
import matplotlib.pyplot as plt
import numpy as np
x = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y = list(np.linspace(1, (np.log(0.2 * np.pi)), 10))
y.sort()
plt.stem(x, y, markerfmt='s', linefmt='--', basefmt=':', use_line_collection=True)
plt.show()
执行此代码后,得到:
排序后的棒棒糖图(来源 – 个人电脑)
记住,这里硬编码了X标签。因此,X标签与任何值无关。这就是为什么在排序值时,标签保持在原位。
import matplotlib.pyplot as plt
import numpy as np
x = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y = list(np.linspace(1, (np.log(0.2 * np.pi)), 10))
y.sort()
my_range = range(1, len(x) + 1)
plt.hlines(y=x, xmin=0, xmax=y, color='skyblue')
plt.plot(y, x, "o")
plt.show()
执行此代码后,得到:
水平棒棒糖图(来源 – 个人电脑)
在这里,使用.hlines()
方法绘制棒棒糖图的水平棒,使用.plot()
方法绘制糖果,指定标记为“o”。
让通过一个例子来比较条形图和棒棒糖图,以确定哪个更适合例子。在这里,将为水平条形图和水平棒棒糖图绘制子图,以便并排比较这两个图形。使用NumPy库生成随机数据。在Y轴上,使用了range()
函数,并将每个标签转换为字符串。
import matplotlib.pyplot as plt
import numpy as np
x = list(map(str, range(1, 35)))
y = list(np.random.random(34))
f, axs = plt.subplots(1, 2, figsize=(12, 6))
axs[0].barh(x, y)
axs[1].hlines(y=x, xmin=0, xmax=y, color='skyblue')
axs[1].plot(y, x, marker="o", linewidth=0)
plt.show()
执行此代码后,得到:
比较水平条形图和水平棒棒糖图(来源 – 个人电脑)
因此,在水平棒棒糖图中读取数据比在水平条形图中更容易。人们可以轻松地对值进行排名并比较类别。此外,类别的更多类别可能会使类别轴变得杂乱无章。因此,人们不应该依赖于一种图表来解决问题。为问题绘制不同的图表并选择最佳图表是一个更明智的决定。
注意:在这里使用了NumPy随机的.random()
方法。每次运行代码时,都会产生不同的值集。因此,每次运行代码时都会得到不同的图表。
在本文中,学习了如何在Python中构建基本的棒棒糖图。但这个话题并没有结束。人们可以对他们的棒棒糖图进行大量的修改。上面学到的是最基本的修改,可以用较少的努力完成。当今许多BI工具和编程语言都能够构建像棒棒糖图这样的高级可视化。事实上,matplotlib的.stem()
方法受到了MATLAB的茎方法的启发。可以将棒棒糖图称为条形图的特例。还讨论了在构建棒棒糖图时必须避免的错误。人们可以尝试构建自己的棒棒糖图版本,因为人们总是通过尝试来学习。
在LinkedIn上与联系:。