我需要一些关于python代码的帮助。问题在于,当我尝试绘制条形图时,条形图重叠。
import csv
import matplotlib.pyplot as plt
import random
def generate_color():
color = '#{:02x}{:02x}{:02x}'.format(*map(lambda x: random.randint(0, 255), range(3)))
return color
#Nota: a direccion de la base de datos depende de donde esta se localice, es por esto que dependiendo de la compu requiera de la modificacion de la ruta
#Se agrega el doble backslach para que funciones
with open("PIB.csv", "r") as PIB:
PIBReader=csv.reader(PIB, delimiter=';')
PIBList=[]
for row in PIBReader:
PIBList.append(row)
PIB.close()
with open("PIB_PerCapita.csv", "r") as PIBper:
PIBperReader=csv.reader(PIBper, delimiter=';')
PIBperList=[]
for row in PIBperReader:
PIBperList.append(row)
PIBper.close()
#print(PIBList)
#print(len(socreList))
#print(len(socreList[0]))
CountryList=[]
Isocode=[]
Anos=[]
for newrow in PIBList:
CountryList.append(newrow[0])
Isocode.append(newrow[1])
for a in range(2,len(PIBList[0])-1,1):
Anos.append(PIBList[0][a])
#print(CountryList)
#print(Isocode)
print ("Bienvenido al formulador de graficos del PIB y PIB percapita de la base de datos del Banco Munidal 2016")
print("Este programa funciona con los Codigo de pais de los paises.")
print()
print("Elija una de las siguientes opciones: \n 1)Desplegara una lista de paises y su Codigo de pais separado con un TAB \n 2)Deplegara un grafico, requiere conocer el Codigo de país")
print()
PrimeraEleccion=int(input("Ingrese la opcion: "))
print()
if PrimeraEleccion>2 or PrimeraEleccion<1:
print("Estas opciones no son validas, favor ejecutar el programa de nuevo y elegir una opcion real.")
if PrimeraEleccion==1:
print("Selecciono la opcion 1, la cual le desplegara el nombre de los paises de la base de datos y su Codigo de país.")
print()
print("#", end=" ")
print("Pais",end=" ")
print("Codigo de pais ",end=" ")
print()
xx=1
for prin in range(1,len(CountryList),1):
print(str(xx)+". ",end=" ")
print(CountryList[prin], end=" ")
print(Isocode[prin], end=" ")
xx=xx+1
print()
print("Si quiere obtener graficos favor correr el programa de nuevo y seleccionar la segunda opcion. Nota: Para la opcion dos se requiere del Codigo de país.")
if PrimeraEleccion==2:
lista2=[]
coldato=3
print("Selecciono la opcion 2, con esta opcion se le podran realizar graficos de lineas o de barras para los indicadores.")
print("Seleccione una de las siguientes opciones: \n 1) Realizar graficos comparando el PIB de distintos paises \n 2) Realizar graficos comparando el PIB percapita de distintos paises \n 3) Realizar un grafico comparando el PIB y el PIB percapita de un pais")
SegundaEleccion=int(input("Ingrese la opcion de lo que desea realizar: "))
if SegundaEleccion<1 or SegundaEleccion>3:
print("Esta opcion no es valida, favor correr el programa de nuevo y selecionar una opcion real.")
if SegundaEleccion==1:
print("Selecciono realizar un grafico comparativo del PIB de los paises.")
NumeroPaises=int(input("Para iniciar ingrese el numero de paises que desea comparar: "))
ListaNumeroPaises=[]
for i in range(NumeroPaises):
x=input("Ingrese uno a uno los codigos de los paises que desea graficar: ")
ListaNumeroPaises.append(x)
#print(ListaNumeroPaises)
#print(len(ListaNumeroPaises))
lista2=[]
matriz=[]
NomberPais=[]
for datos in range(len(ListaNumeroPaises)):
for datos2 in range(len(PIBList)):
if ListaNumeroPaises[datos]==PIBList[datos2][1]:
for i in range(2,len(PIBList[1])-1,1):
y=float(PIBList[datos2][i].replace(",","."))
lista2.append(y)
#print(lista2)
yy=PIBList[datos2][0]
NomberPais.append(yy)
matriz.append(lista2)
lista2=[]
#print(matriz)
print("Ahora seleccione que tipo de grafico le gustaria realizar: \n 1) De line \n 2) De barras")
TerceraEleccion=int(input("Ingrese la opcion: "))
if TerceraEleccion==1:
for i in range(len(matriz)):
plt.plot(Anos,matriz[i])
if TerceraEleccion==2:
for i in range(len(matriz)):
plt.bar(Anos,matriz[i])
plt.legend(NomberPais, loc='upper left')
plt.ylabel("PIB en miles de millones")
plt.xlabel("Años")
plt.show()
if SegundaEleccion==2:
print("Selecciono realizar un grafico comparativo del PIB per capita de los paises.")
NumeroPaises=int(input("Para iniciar ingrese el numero de paises que desea comparar: "))
ListaNumeroPaises=[]
for i in range(NumeroPaises):
x=input("Ingrese uno a uno los codigos de los paises que desea graficar: ")
ListaNumeroPaises.append(x)
#print(ListaNumeroPaises)
#print(len(ListaNumeroPaises))
lista2=[]
matriz=[]
NomberPais=[]
for datos in range(len(ListaNumeroPaises)):
for datos2 in range(len(PIBperList)):
if ListaNumeroPaises[datos]==PIBperList[datos2][1]:
for i in range(2,len(PIBperList[1])-1,1):
y=float(PIBperList[datos2][i].replace(",","."))
lista2.append(y)
#print(lista2)
yy=PIBperList[datos2][0]
NomberPais.append(yy)
matriz.append(lista2)
lista2=[]
#print(matriz)
print("Ahora seleccione que tipo de grafico le gustaria realizar: \n 1) De line \n 2) De barras")
TerceraEleccion=int(input("Ingrese la opcion: "))
if TerceraEleccion==1:
for i in range(len(matriz)):
plt.plot(Anos,matriz[i])
if TerceraEleccion==2:
var=0
width=0.15
for i in range(len(matriz)):
x_plot=range(len(matriz[i]))
plt.bar(x_plot,matriz[i])
plt.xticks(x_plot, Anos, rotation="vertical")
plt.legend(NomberPais, loc="upper left")
plt.ylabel("PIB en miles de millones")
plt.xlabel("Años")
plt.show()
很抱歉,如果代码的某些部分是西班牙语。提前感谢您的帮助。
答案 0 :(得分:0)
您可以这样做:
import matplotlib.pyplot as plt
import numpy as np
years = np.arange(5)
values1 = range(5)
values2 = range(5,0,-1)
width = .2
plt.figure(1).clf()
plt.bar(years-width, values1, color='b', width=width)
plt.bar(years, values2, color='r', width=width)
答案 1 :(得分:0)
此代码从任意数量的数据集生成相邻的条形码:
import matplotlib.pyplot as plt
import numpy as np
# shape is number of datasets, number of bars per dataset
data = np.random.uniform(100, 400, (3, 5))
separation = 0.1 # separation between groups of bars
spacing = 0.01 # separation between single bars
width = (1 - separation) / data.shape[0]
pos = np.arange(data.shape[1])
shift = width * (data.shape[0] - 1) / 2
for i, values in enumerate(data):
plt.bar(
pos + i * width - shift,
values,
width=width - spacing
)
plt.xticks(pos)
plt.show()
对于给定的(3,5):
对于6,3