¡La forma más fácil! ! Utilice Python para generar gráficos de barras dinámicos (¡resuelva los informes de errores!)

¡La forma más fácil! ! Generar gráfico de barras dinámico con python

Recientemente, los gráficos de barras dinámicos son muy populares. En sitios de videos como la estación B, estos videos a menudo tienen millones de visitas. Hoy en día, usamos una biblioteca de terceros: bar_chart_race (versión 0.2) para generar gráficos de barras dinámicos; El efecto generado se muestra en la figura:
Problema: Descubrí que siguiendo las operaciones en los artículos populares actuales, habrá muchos errores , algunos de los cuales los resolví y otros no. Ahora registre el progreso actual aquí; los datos y procedimientos están en Aquí: haga clic para descargar ;

Inserte la descripción de la imagen aquí

1. Instale el paquete de terceros: bar_chart_race

En primer lugar, debemos entender: solo la versión 0.2 admite gráficos de barras dinámicos, por lo que debemos asegurarnos de que la biblioteca de terceros que instalamos sea la versión 0.2;
desafortunadamente, el paquete de terceros que instalamos a través del comando pip install bar_chart_race es la versión 0.1. Tampoco se puede actualizar; por lo tanto, recomendamos descargar en github y luego instalar; los pasos de instalación son los siguientes:

  1. En primer lugar, asegúrese de haber instalado el software github. De lo contrario, descárguelo aquí para Windows: https://git-scm.com/download/win , haga clic en su propia versión para descargarla y luego instálela; lo mismo ocurre con otros sistemas ~~
    Inserte la descripción de la imagen aquí

  2. Después de instalar git, cambie al directorio que desea descargar en cmd y descargue: git clone https://github.com/dexplo/bar_chart_race.git
    Entre ellos, https://github.com/dexplo/bar_chart_race.git es su dirección de git;
    el directorio que descargué aquí es :, la D:\PY_useful\3_python 基础descarga está completa Después de eso, se generará una carpeta:bar_chart_race
    Inserte la descripción de la imagen aquí

  3. Ingrese la carpeta en cmd, y luego ejecute :, una python setup.py installvez completada la instalación, le preguntará :, al Finished processing dependencies for bar-chart-race==0.2.0ver esto, ¡demuestra que tenemos éxito!
    Inserte la descripción de la imagen aquí

2. Preparación de datos

Los datos deben cumplir las siguientes condiciones:

  1. Cada fila debe tener una sola fecha de datos;
  2. Cada columna es una categoría separada;
  3. El índice es preferiblemente datos de fecha (opcional);
  4. Los datos deben cambiarse al formato pandas.DataFrame;

Sitio web oficial https://www.dexplo.org/bar_chart_race/, los ejemplos de sitios web oficiales son los siguientes:

fecha Bélgica China Francia Alemania Iran Italia Países Bajos España Estados Unidos Reino Unido
2020-04-08 2240 3337 10887 2349 3993 17669 2255 14792 14704 7111
2020-04-09 2523 3339 12228 2607 4110 18279 2403 15447 16553 7993
2020-04-10 3019 3340 13215 2767 4232 18849 2520 16081 18595 8974
2020-04-11 3346 3343 13851 2894 4357 19468 2653 16606 20471 9892
2020-04-12 3600 3343 14412 3022 4474 19899 2747 17209 22032 10629

Sin embargo, el sitio web oficial son ejemplos del uso de la df = bcr.load_dataset('covid19_tutorial')carga, y si no estamos por encima del muro, no puede cargar los datos, los datos los pongo aquí para que todos practiquen: Haga clic para descargar los datos de entrenamiento ;

3. Explicación de la función

El módulo de terceros bar_chart_race tiene solo dos funciones para generar nuestro gráfico dinámico,

  1. Gráfico de barras dinámico :; bar_chart_race.bar_chart_race()A continuación se explica en detalle todos los parámetros de esta función:
  2. Gráfico de líneas dinámicas bar_chart_race.line_chart_race(): similar al gráfico de barras anterior;
import bar_chart_race as bcr
import pandas
df=pd.read_csv('数据.csv',index_col=0)   # 下载数据后,放在.py文件所在文件夹;

# 以下有 # 注释的参数,是我实际使用中发现并没有的;可是官网资料上有这些参数,不知道为什么~~
bcr.bar_chart_race(
    df=df,    # 第一个参数就是数据,这个数据格式必须是 pandas.DataFrame 格式,同时满足数据准备中所说的条件;
    filename='bar_chart.mp4',   # 这个参数是生成文件的名字,一般为.mp4 & .gif;
    orientation='h',    # 方向
    sort='desc', # 排序
    n_bars=6, # 限制条形图数量
    fixed_order=False,  # 固定标签
    fixed_max=True, # 固定轴的最大值
    steps_per_period=10,   # 帧数设置
    interpolate_period=False,  # 插入时间
    # label_bars=True,   # 是否有label
    bar_size=.95,   # 设置bar宽度 取值 0~1 之间;
    period_label={
    
    'x': .99, 'y': .25, 'ha': 'right', 'va': 'center'},
    # period_fmt='%B %d, %Y',  # 日期的格式设置
    period_summary_func=lambda v, r: {
    
    'x': .99, 'y': .18,
                                      's': r'Total weigth: {v.sum():,.0f}',
                                      'ha': 'right', 'size': 8, 'family': 'Courier New'},
    perpendicular_bar_func='median',
    period_length=500,
    # figsize=(5, 3),
    # dpi=144,
    # cmap='dark12',
    title='COVID-19 Deaths by Country',
    # title_size='',
    # bar_label_size=7,
    # tick_label_size=7,
    shared_fontdict={
    
    'family' : 'DejaVu Sans', 'color' : '.1'},
    scale='linear',
    writer=None,
    fig=None,
    bar_kwargs={
    
    'alpha': .7},
    filter_column_colors=False) 

4. Ejemplos detallados (copiar y usar)

4.1 Gráfico de barras básico

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图.mp4')

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.2 Histograma

Usando orientationparámetros del patrón de conversión, orientationse pueden asignar dos valores hy v;

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图.mp4',orientation='v')

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.3 Diagrama de clasificación

Por defecto, está ordenado en orden descendente. Cuando necesitemos ordenar en orden ascendente, use el parámetro:sort='asc'

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图_升序.mp4',sort='asc')

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.4 Limitar el número de barras

Por defecto, se mostrarán todas las columnas, si necesitamos controlar el número, use el parámetro :, n_bars=6donde el número 6 se puede cambiar a cualquier entero;

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图_5条形图.mp4',n_bars=5)

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.5 Orden de barras fijas

Por defecto, el gráfico de barras estará ordenado en orden descendente, si queremos arreglar el orden, usemos el parámetro :, fixed_ordercámbielo a Verdadero o asigne una lista;

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图_条形固定.mp4',fixed_order=['Apple', 'banana', 'watermelon', 'orange'])

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.6 Eje fijo máximo

Por defecto, el valor máximo de acuerdo con el eje de tiempo de conversión, si los parámetros fijos deseados: fixed_max=True.

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_固定轴的最大值.mp4',fixed_max=True)

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.7 Establecer el número de fotogramas

Por defecto, el número de fotogramas es 10, podemos aumentar este valor para suavizar la imagen, por supuesto, también se puede reducir;

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_设置帧数.mp4',steps_per_period=24)

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.8 Configuración de la duración del paso y el tiempo de permanencia

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_设置步长与停留时间.mp4',steps_per_period=20, period_length=200)

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.9 Agregar tiempo de inserción

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_插入时间.mp4',interpolate_period=True)

4.10 Establecer propiedades de fuente

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_设置字体属性.mp4',shared_fontdict={
    
    'family': 'Helvetica', 'weight': 'bold','color': 'rebeccapurple'})

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.11 Personalizar atributos de barra

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_定制条形属性.mp4',bar_kwargs={
    
    'alpha': .2, 'ec': 'black', 'lw': 3})

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.12 Agregar descripción de texto

Esto, la investigación aún no ha tenido éxito, actualice más tarde ~

4.13 Incrementar la barra vertical promedio

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_增加垂直bar平均值.mp4',perpendicular_bar_func='mean')

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.14 Máximo de barra vertical personalizada

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
# 自定义增加垂直bar
def func(values, ranks):
    return values.max()
bcr.bar_chart_race(df,filename='动态条形图_增加垂直bar自定义最大值.mp4', perpendicular_bar_func=func)

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

4.15 Los colores del gráfico de barras no se repiten

import bar_chart_race as bcr
import pandas as pd

df=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_条形图颜色不重复.mp4',filter_column_colors=True)

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

5. Problemas encontrados

5.1 [error] AttributeError: module ‘sip‘ has no attribute ‘setapi‘

Descripción del problema: Importar informe de error bar_chart_race de importación Recientemente encontré un error al
importar el bar_chart_racepaquete: AttributeError: module'sip 'no tiene atributo'setapi'
Paquete importado:

import bar_chart_race as bcr

Simplemente ejecute la declaración importada, informará un error: AttributeError: module'sip 'no tiene atributo'setapi'

Solución:
Finalmente, encontré que el motivo de este error era que la versión de la biblioteca matplotlib era demasiado alta. La versión que informé era 3.3.2. No hay problema si la degrado a 3.3.0;

Desinstale primero:pip uninstall matplotlib

Instalar de nuevo:pip install matplotlib==3.3.0

¡problema resuelto! !

5.2 [Informar de error] IndexError: list index out of range

Descripción del problema: cuando la salida está en formato .gif (si está en formato .mp4, no se informará ningún error), se informará un error durante el tiempo de ejecución:IndexError: list index out of range

Solución: Descargar : descargue https://imagemagick.org/script/download.phpel software en el sitio, simplemente instálelo, pero esta URL es lenta para descargar, también puede hacer clic aquí para descargar ( hacer clic para descargar ); Descargar e instalar, recuerde verificar estos dos
Inserte la descripción de la imagen aquí
elementos al instalar ; una vez completada la instalación, el problema está resuelto ! !

5.3 [informe de error] TypeError: bar_chart_race() got an unexpected keyword argument 'figsize'

Descripción del problema: al configurar de acuerdo con el ejemplo en el sitio web oficial, se encuentra que algunos parámetros no están en la función real, que se enumeran a continuación:

    label_bars=True,   # 是否有label
    period_fmt='%B %d, %Y',  # 日期的格式设置
    figsize=(5, 3),
    dpi=144,
    cmap='dark12',
    title_size='',
    bar_label_size=7,
    tick_label_size=7,

Los parámetros enumerados anteriormente no están incluidos en la función, y no sé por qué ~ Debido a que el artículo sobre este paquete de terceros, todos son un ejemplo del sitio web oficial de la traducción, y nadie realmente lo verificó, por lo que esta pregunta, si tiene Sabes la razón ~ Bienvenidos todos a decirme ~ ¡Gracias! !

Supongo que te gusta

Origin blog.csdn.net/weixin_47139649/article/details/109116992
Recomendado
Clasificación