简单绘制一个3D效果的饼图吧

我们来演示一下使用plotrixdplyrggsci等库来生成一个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 # 数值,表示饼图的阴影强度
)

image-20231221230554136

可以看到,上面的案例充分说明了饼图在一些情况下可能不太适用,因为它在传达数据信息和比较各部分大小方面存在一些问题。很难直观地感受到到1,2,3,4的饼的大小比例的变化

一些人认为饼图不容易准确地传达数据,尤其是当有多个部分时。以下是一些关于饼图的常见批评:

  1. 难以比较部分大小: 人类视觉难以精确比较不同角度的扇形大小,尤其是在有多个部分的情况下。
  2. 限制部分数量: 饼图通常适用于表示少量部分的情况。当有很多部分时,饼图可能变得混乱难读。

如果你想改进可视化方案,以下是一些建议:

  1. 使用条形图: 条形图是更直观和易于比较的一种方式。你可以考虑使用条形图代替饼图。
  2. 避免3D效果: 3D效果可能会使图表更难以理解,尤其是在表示比例时。尽量使用简单的2D图表。
  3. 添加标签或数据表格: 在图表上添加数值标签或提供数据表格,以便更清晰地呈现数据。
  4. 使用更直观的颜色: 考虑使用更易于区分的颜色,避免引起混淆。
  5. 考虑使用其他图表类型: 根据数据的特点,考虑使用更适合的图表类型,如堆积条形图或直方图等。

比如我们条形图一下上面的饼图同样的数据看看:


# 绘制条形图
barplot(
 df$counts,
 names.arg = df$sample,
 col = df$color,
 border = "white",
 main = "Bar Plot",
 xlab = "Sample",
 ylab = "Counts"
)

image-20231221230910669

是不是比上面的饼图更清晰呢?

使用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 的数据框,其中包含了 samplecountscolorpercent 这几列数据。

在 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也可以很快出图:

Python也可以很快出图

 

Comments are closed.