2017-06-16 251 views
1

我需要一些帮助我的代码在python上。问题是,当我尝试绘制条形图时,条形图会重叠。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() 

And this is the output:

很抱歉,如果代码的某些部分是西班牙。提前感谢您的帮助。

+0

问题是你想如何显示它? – Julien

+0

我需要它将酒吧分开,所以理论上它应该是酒吧每年。 – Andres

回答

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) 
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):

resukt 3 5

并用于6,3 3

resukt 6 3