Python dibuja un histograma apilado


本文详细介绍如何使用 Matplotlib 绘制柱状堆叠图


1. Importar biblioteca

import matplotlib.pyplot as plt
import numpy as np

2. Preparación de datos

Ejemplo: pandas es una herramienta basada en NumPy creada para resolver tareas de análisis de datos.
Antes de que podamos comenzar a trazar un gráfico de columnas apiladas, necesitamos generar datos experimentales. En este caso, podemos usar la biblioteca NumPy para generar dos matrices y1 e y2 para representar las ventas de los productos A y B en cinco ciudades diferentes, respectivamente. el código se muestra a continuación:

import numpy as np

# 生成实验数据
x = np.array(['A', 'B', 'C', 'D', 'E'])
y1 = np.array([12, 25, 19, 23, 20])
y2 = np.array([15, 24, 25, 18, 20])

3. Dibuje un gráfico apilado de columnas básico

1. Dibujar gráficos básicos

Utilice la función de barra de Matplotlib para dibujar un gráfico de barras apiladas. Esta función necesita pasar los siguientes parámetros:

  1. izquierda: la posición izquierda de cada rectángulo;
  2. altura: la altura de cada barra rectangular;
  3. inferior: la posición del borde inferior de cada rectángulo, es decir, la posición de la parte superior del rectángulo anterior;
  4. ancho: el ancho de cada barra rectangular, el valor es 0.8 por defecto.

Utilice dos matrices y1 e y2 para representar las ventas de los productos A y B en cinco ciudades respectivamente, y utilice una matriz x para representar los nombres de cada ciudad. Primero definamos un parámetro de dibujo sobre el histograma, el código es el siguiente:

# 设置字体样式和大小
font={
    
    'family':'Times New Roman','size':28}
font_value = {
    
    'family':'Times New Roman','size':20}

# 绘制柱状堆叠图,设置柱子颜色和标签
fig, ax = plt.subplots(figsize=(12, 8))
N = len(y1)
width = 0.45
ind = np.arange(N)

bar_plot1 = ax.bar(ind, y1, width, color=plt.cm.Set1(np.arange(N)), alpha=0.7, label='Type A')
bar_plot2 = ax.bar(ind, y2, width, bottom=y1, color=plt.cm.Set2(np.arange(N)), alpha=0.7, label='Type B')

inserte la descripción de la imagen aquí

2. Establezca el ancho de la columna, agregue la etiqueta de escala y el ángulo de rotación

Ajusta el ancho de las columnas para que haya una mayor distancia entre ellas para distinguir más claramente las ventas en cada ciudad.
Puede usar el parámetro ancho para ajustar el ancho de la columna, por ejemplo, ancho = 0,4. Además, debemos agregar etiquetas de marca en el eje horizontal y rotar las etiquetas 45 grados para mostrar más claramente el nombre de cada ciudad. el código se muestra a continuación:

# 设置字体样式和大小
font={
    
    'family':'Times New Roman','size':28}
font_value = {
    
    'family':'Times New Roman','size':20}

# 绘制柱状堆叠图,设置柱子颜色和标签
fig, ax = plt.subplots(figsize=(12, 8))
N = len(y1)
width = 0.45
ind = np.arange(N)

bar_plot1 = ax.bar(ind, y1, width, color=plt.cm.Set1(np.arange(N)), alpha=0.7, label='Type A')
bar_plot2 = ax.bar(ind, y2, width, bottom=y1, color=plt.cm.Set2(np.arange(N)), alpha=0.7, label='Type B')

# 添加标题、标签和图例
ax.set_title('Sales of Product A & B in Different Cities', fontsize=24)
ax.set_xlabel('City', font)
ax.set_ylabel('Value', font)
ax.legend(ncol=2, loc='best', fontsize=20)

# 设置横坐标轴刻度标签旋转角度
new_x = ['City '+i for i in x]
plt.xticks(np.arange(len(x)), new_x, rotation=45)

# 显示图表
plt.show()


4. Código completo

import matplotlib.pyplot as plt
import numpy as np

# 生成实验数据
x = np.array(['A', 'B', 'C', 'D', 'E'])
y1 = np.array([12, 25, 19, 23, 20])
y2 = np.array([15, 24, 25, 18, 20])

# 设置字体样式和大小
font={
    
    'family':'Times New Roman','size':28}
font_value = {
    
    'family':'Times New Roman','size':2}

# 绘制柱状堆叠图,设置柱子颜色和标签
fig, ax = plt.subplots(figsize=(12, 8))
#定义绘图的柱子组数
N = len(x)
###设置柱子宽度
width = 0.45
ind = np.arange(N)

bar_plot1 = ax.bar(ind, y1, width, color=plt.cm.Set1(np.arange(N)), alpha=0.7, label='Type A')
bar_plot2 = ax.bar(ind, y2, width, bottom=y1, color=plt.cm.Set2(np.arange(N)), alpha=0.7, label='Type B')
# bar_plot3 = bar_plot2+bar_plot
# 添加标题、标签和图例
# ax.set_title('Temperature / ℃', fontsize=24)
ax.set_xlabel('City', font)
ax.set_ylabel('Value', font)
ax.legend(ncol=2, loc='best', fontsize=20)
ax.set_ylim(0,53)

##x轴刻度名称、倾斜角度
new_x = ['City '+i for i in x]
plt.xticks(np.arange(len(x)), new_x, rotation=45)
# 设置坐标轴刻度字体和字号

font_tick = {
    
    'family': 'Times New Roman', 'size': 24}
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontproperties(font_tick)


# 调整字体颜色、柱子宽度等其他参数
for rect, height_1, height_2 in zip(bar_plot2, y1, y2):
    height_2 = rect.get_height()
    ax.text(rect.get_x() + rect.get_width()/2., height_1 + height_2 + 0.5, '%d' % int(height_2),
            ha='center', va='bottom', fontsize=20, color='green', fontname='Times New Roman')
    ax.text(rect.get_x() + rect.get_width()/2., height_1 + 1/2, '%d' % int(height_1),
            ha='center', va='bottom', fontsize=20, color='blue', fontname='Times New Roman')
   
##右上边框是否可见
# ax.spines['top'].set_visible(False)
# ax.spines['right'].set_visible(False)

##刻度线长宽设置
ax.tick_params(axis='x', direction='out', length=6, width=2)
ax.tick_params(axis='y', direction='in', length=6, width=2)

plt.tight_layout()
plt.savefig("C:/Users/ypzhao/Desktop/a.jpg",dpi=600)
# 显示图表
plt.show()

5. Ejecución de resultados

inserte la descripción de la imagen aquí

Seis, Python dibujando series anteriores de catálogo de artículos.

往期python绘图合集:
1. Python dibuja un gráfico de línea simple
2. Python lee datos en Excel y dibuja múltiples subgráficos y múltiples grupos de gráficos en un lienzo
3. Python dibuja un histograma con barras de error
4. Python dibuja múltiples subgráficos y los muestra por separado
5, Python lee datos de Excel y dibuja imágenes de varios ejes Y
6, Python dibuja histogramas y embellece | rellena columnas con diferentes colores
7, Python genera datos aleatoriamente y utiliza ejes Y dobles para dibujar dos gráficos de líneas con barras de error
8, Python dibuja con errores Gradiente relleno de color de gráficos de barras con anotación de datos (avanzado)
9. Python dibuja gráficos de dispersión | el tamaño del punto de dispersión y la profundidad de color están determinados por valores numéricos
10. Matplotlib dibuja hermosos gráficos circulares | python dibuja hermosos gráficos circulares
11. Python lee datos de Excel y dibuja
histogramas y gráficos de líneas con ejes y dobles, y las columnas se rellenan con
colores degradados Datos
14, Python dibuja un mapa de densidad
15, Python dibuja un gráfico de líneas con un intervalo de confianza

Supongo que te gusta

Origin blog.csdn.net/m0_58857684/article/details/131031042
Recomendado
Clasificación