Python图条重叠

时间:2017-06-16 04:20:52

标签: python plot

我需要一些关于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:

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

2 个答案:

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

resukt 3 5

对于6,3

resukt 6 3