堆积柱状图显示各分类等级下物种所占百分比

请教一下有谁知道这个怎么搞:我想绘制一个堆积条形图,用来显示各个分类等级下(门纲目科属)物种所占比例,每个等级下的类型数量不一样,如门这一类等级包括两种(98%和2%),纲包括7种(50%、20%、20%……)以此类推。
要求:一张图;横坐标显示门纲目科属,纵轴显示百分比,每个分类等级对应一条柱,且显示各类型的成分(我的图片放不到这里面)

Power bi 3.6 百分比堆积柱形图
可以借鉴下
https://blog.csdn.net/c1z2w3456789/article/details/121854620

参考GPT和自己的思路:您可以使用任何数据可视化工具,如Excel、Tableau等,来创建堆积柱状图。

首先,您需要按照分类等级整理数据,并计算每个分类等级下的各类型数量占比。例如,门这一分类等级有98%和2%两种类型,您需要计算出它们各自的占比。

然后,您可以将这些数据导入到您选择的数据可视化工具中,并创建一个堆积柱状图。在堆积柱状图中,每个分类等级对应一条柱,柱子的高度表示该分类等级下各类型的占比。

最后,您可以对图表进行美化,如添加图例、调整颜色等,以便更好地展示数据。

希望这可以帮助您解决问题!

基于GPT4和Treabhar的编写:

img

import matplotlib.pyplot as plt
import numpy as np

# 你的数据,这里只是作为例子
data = {
    'phylum': {'type1': 98, 'type2': 2},
    'class': {'type1': 50, 'type2': 20, 'type3': 20, 'type4': 10},
    'order': {'type1': 40, 'type2': 30, 'type3': 20, 'type4': 10},
    'family': {'type1': 30, 'type2': 30, 'type3': 20, 'type4': 20},
    'genus': {'type1': 25, 'type2': 25, 'type3': 25, 'type4': 25},
}

labels = list(data.keys())
type_labels = set(t for v in data.values() for t in v.keys())
type_labels = sorted(list(type_labels), reverse=True)

bottom = np.zeros(len(labels))

for type_label in type_labels:
    values = [v.get(type_label, 0) for v in data.values()]
    plt.bar(labels, values, label=type_label, bottom=bottom)
    bottom += values

plt.ylabel('Percentage %')
plt.title('Species distribution')
plt.legend(title='Types', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.show()


来自GPT的回答:

您可以使用各种数据可视化工具和编程语言来创建堆积条形图。我将为您提供两种常用的方法:使用Python的Matplotlib库和使用R语言的ggplot2包。

使用Python的Matplotlib库:

以下是使用Matplotlib库创建堆积条形图的示例代码:

python
Copy code
import matplotlib.pyplot as plt

# 分类等级的名称
categories = ['门', '纲', '目', '科', '属']

# 每个分类等级下的类型数量
counts = [
    [98, 2],        # 门
    [50, 20, 20, ...],  # 纲
    [/* 按照需求填写 */],  # 目
    [/* 按照需求填写 */],  # 科
    [/* 按照需求填写 */]   # 属
]

# 类型的百分比
percentages = [
    [98, 2],        # 门
    [50, 20, 20, ...],  # 纲
    [/* 按照需求填写 */],  # 目
    [/* 按照需求填写 */],  # 科
    [/* 按照需求填写 */]   # 属
]

# 颜色列表,可根据需要进行修改
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd']

# 绘制堆积条形图
fig, ax = plt.subplots()
bars = []

for i in range(len(categories)):
    if i == 0:
        bar = ax.bar(categories[i], percentages[i], color=colors[i])
    else:
        bottom = sum(percentages[j][k] for j in range(i))  # 累加前面分类等级的类型数量
        bar = ax.bar(categories[i], percentages[i], bottom=bottom, color=colors[i])
    bars.append(bar)

# 添加图例
ax.legend(bars, ['类型1', '类型2', ...])  # 根据实际情况填写类型名称

# 设置标题和轴标签
ax.set_title('堆积条形图')
ax.set_xlabel('分类等级')
ax.set_ylabel('百分比')

# 显示图形
plt.show()
您需要根据实际情况填写每个分类等级下的类型数量和类型的百分比,以及自定义颜色和类型名称。

使用R语言的ggplot2包:

以下是使用ggplot2包创建堆积条形图的示例代码:

R
Copy code
library(ggplot2)

# 分类等级的名称
categories <- c('门', '纲', '目', '科', '属')

# 每个分类等级下的类型数量
counts <- list(
  c(98, 2),         # 门
  c(50, 20, 20, ...),   # 纲
  c(/* 按照需求填写 */),   # 目
  c(/* 按照需求填写 */),   # 科
 




Re

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个问题需要用到一些数据处理和可视化库,比如pandas和matplotlib。下面是一个示例代码,可以实现你的需求:

import pandas as pd
import matplotlib.pyplot as plt

# 模拟数据
data = {
    "Doors": [98,2],
    "Classes": [50,20,20,5,3,1,1],
    "Orders": [30,20,10,10,10,10,10],
    "Families": [20,20,20,20,10,5,5],
    "Genera": [20,20,20,20,10,5,5],
}

df = pd.DataFrame(data)

# 计算每个等级下的总和
sums = df.sum(axis=1)

# 计算每个等级下每个类型的占比
for col in df.columns:
    df[col] = df[col] / sums

# 绘图
ax = df.plot(kind="bar", stacked=True)

# 添加标签
labels = ["Doors", "Classes", "Orders", "Families", "Genera"]
ax.legend(labels, loc='upper right')

ax.set_xticklabels(df.index, rotation=0)
ax.set_xlabel("Taxonomic Rank")
ax.set_ylabel("Percentage")

plt.show()

这个代码使用了pandas的DataFrame来处理数据,并使用matplotlib来绘制堆积柱状图。具体步骤如下:

  1. 根据你提供的数据,创建一个字典,字典的键为每个分类等级(Doors、Classes、Orders等),对应的值为一个列表,列表中的元素为每个类型的数量或百分比。
  2. 使用pandas的DataFrame将字典转换为一个数据框,并计算每个分类等级下每个类型的占比。
  3. 使用matplotlib的bar函数绘制堆积柱状图,并设置x轴标签、y轴标签等属性。
  4. 最后展示图像。

希望这个代码能够帮到你。
如果我的回答解决了您的问题,请采纳!

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

根据你的描述,这是一个比较典型的堆积条形图(Stacked Bar Chart)。实现步骤如下:

  1. 横坐标(x轴)显示分类等级,如门、纲、目、科、属等。这需要准备分类名数组。
  2. 纵坐标(y轴)显示百分比,范围0-100%。
  3. 每个分类等级的数据作为一条柱的成分,柱的高度由各类型所占比例决定。
  4. 使用matplotlib.pyplot库绘制堆积条形图。主要步骤为:
  • 设置图形大小和背景色
  • 绘制x轴和y轴,设置标签和范围
  • 设置柱的位置(x轴坐标)和宽度
  • 遍历每个分类等级的类型
    • 计算类型占总体的百分比
    • 设置柱的底部坐标(上一类型的高度)和高度(当前类型百分比)
    • 绘制柱并填充颜色
    • 在柱的中间显示类型名称和具体百分比
  • 设置图例并显示图形

代码示例:

python
import matplotlib.pyplot as plt

# x轴分类名 
x = ['门', '纲', '目', '科', '属'] 

# 门类型及其占比
door_type = ['型1', '型2']
door_percent = [98, 2]

# 纲类型及其占比  
grade_type = ['纲1', '纲2', '纲3', '纲4', '纲5', '纲6', '纲7']
grade_percent = [50, 20, 15, 5, 5, 3, 2]

# 其余分类类型和占比...

# 绘图
plt.figure(figsize=(8, 6), dpi=80)
plt.bar(x, [0, 0, 0, 0, 0], width=0.5, bottom=0, color='white')

# 绘制门类型
bottom = 0 
for i in range(len(door_type)):
  plt.bar(x[0], door_percent[i], width=0.5, bottom=bottom, color='#66ff99')
  bottom += door_percent[i] 
  plt.text(x[0], bottom-2, door_type[i] + str(door_percent[i]) + '%')

# 绘制纲类型  
bottom = door_percent[1]  
for i in range(len(grade_type)):
  plt.bar(x[1], grade_percent[i], width=0.5, bottom=bottom, color='#ff6600')
  bottom += grade_percent[i]
  plt.text(x[1], bottom-3, grade_type[i] + str(grade_percent[i]) + '%')
  
# 绘制其余类型... 

plt.xlabel('Classification')
plt.ylabel('Percent') 
plt.title('Species composition')
plt.legend()
plt.show()

该示例实现了你描述的一张图显示各分类等级及其类型组成的堆积条形图。具体类型和比例数据需要你提供。