我们来演示一下使用plotrix
、dplyr
和ggsci
等库来生成一个3D饼图,plotrix
提供了pie3D
函数,dplyr
用于数据处理,ggsci
提供了调色板pal_jama
。
首先是安装和加载这些包,代码如下所示:
#BiocManager::install(c("plotrix","dplyr"))
library(plotrix)
library(dplyr)
library(ggsci)
然后我们创作一个示例数据:
df=data.frame(
sample=LETTERS[1:4],
counts=1:4,
color=pal_jama("default")(4),
percent = 1:4/sum(1:4)
)
df
可以看到是非常简单的:
> df
sample counts color percent
1 A 1 #374E55FF 0.1
2 B 2 #DF8F44FF 0.2
3 C 3 #00A1D5FF 0.3
4 D 4 #B24745FF 0.4
接下来就针对这个示例数据进行绘图,代码如下所示:
pie3D(
df$counts , # 向量,包含每个扇形的大小
labels = df$percent, # 向量,包含每个扇形的标签
border = "white", # 字符串,表示饼图边界线的颜色
edges = 1000, # 整数,表示饼图的平滑度,边缘的线段数
radius = 2, # 数值,表示饼图的半径
height = 0.25, # 数值,表示饼图的高度
theta = pi/5, # 数值,表示透视角度
start = pi/3, # 数值,表示饼图的起始角度
col = df$color, # 向量,表示每个扇形的填充颜色
labelcol = "black", # 字符串,表示标签文本的颜色
labelcex = 1.2, # 数值,表示标签文本的字符大小倍数
explode = 0.1, # 数值,表示每个扇形的偏移量,模拟3D效果
shade = 0.75 # 数值,表示饼图的阴影强度
)
可以看到,上面的案例充分说明了饼图在一些情况下可能不太适用,因为它在传达数据信息和比较各部分大小方面存在一些问题。很难直观地感受到到1,2,3,4的饼的大小比例的变化
一些人认为饼图不容易准确地传达数据,尤其是当有多个部分时。以下是一些关于饼图的常见批评:
- 难以比较部分大小: 人类视觉难以精确比较不同角度的扇形大小,尤其是在有多个部分的情况下。
- 限制部分数量: 饼图通常适用于表示少量部分的情况。当有很多部分时,饼图可能变得混乱难读。
如果你想改进可视化方案,以下是一些建议:
- 使用条形图: 条形图是更直观和易于比较的一种方式。你可以考虑使用条形图代替饼图。
- 避免3D效果: 3D效果可能会使图表更难以理解,尤其是在表示比例时。尽量使用简单的2D图表。
- 添加标签或数据表格: 在图表上添加数值标签或提供数据表格,以便更清晰地呈现数据。
- 使用更直观的颜色: 考虑使用更易于区分的颜色,避免引起混淆。
- 考虑使用其他图表类型: 根据数据的特点,考虑使用更适合的图表类型,如堆积条形图或直方图等。
比如我们条形图一下上面的饼图同样的数据看看:
# 绘制条形图
barplot(
df$counts,
names.arg = df$sample,
col = df$color,
border = "white",
main = "Bar Plot",
xlab = "Sample",
ylab = "Counts"
)
是不是比上面的饼图更清晰呢?
使用Python编程语言做同样的可视化
首先是创建示例数据:
使用 pandas
库创建数据框(DataFrame)。以下是使用 pandas
创建与你之前提到的 df
数据框相似的代码:
import pandas as pd
# 数据
data = {
'sample': ['A', 'B', 'C', 'D'],
'counts': [1, 2, 3, 4],
'color': ['red', 'green', 'blue', 'orange'],
'percent': [0.1, 0.2, 0.3, 0.4]
}
# 创建数据框
df = pd.DataFrame(data)
# 显示数据框
print(df)
这样,你就创建了一个名为 df
的数据框,其中包含了 sample
、counts
、color
和 percent
这几列数据。
在 Python 中使用 matplotlib
库绘制饼图和条形图的简单示例。请确保你已经安装了 matplotlib
库,如果没有,可以通过运行 pip install matplotlib
安装。
饼图示例:
import matplotlib.pyplot as plt
# 数据
labels = df['sample']
sizes = df['counts']
colors = df['color']
explode = (0.1, 0, 0, 0) # 突出显示第一个扇形
# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)
plt.axis('equal') # 保持饼图为正圆形
plt.title('Pie Chart')
plt.show()
条形图示例:
import matplotlib.pyplot as plt
# 数据
samples = df['sample']
counts = df['counts']
colors = df['color']
# 绘制条形图
plt.bar(samples, counts, color=colors)
plt.xlabel('Sample')
plt.ylabel('Counts')
plt.title('Bar Chart')
plt.show()
这些代码演示了如何使用 matplotlib
库创建简单的饼图和条形图,你可以根据实际需求修改图表的样式、颜色、标签等。如下所示,Python也可以很快出图: