Maison >développement back-end >Tutoriel Python >Remplissage des couleurs et des lignes graphiques dans Matplotlib
Matplotlib est une bibliothèque de traçage 2D Python qui peut produire des graphiques de qualité publication dans une variété de formats papier et d'environnements interactifs sur une variété de plates-formes.
Dans le dernier tutoriel de visualisation de données Matplotlib, nous présenterons comment créer des graphiques empilés et des diagrammes circulaires. Ce que je vous apporte aujourd'hui, c'est le remplissage de couleurs et de lignes graphiques.
Couleur
Le premier changement que nous souhaitons apporter est de changer plt.title en variable stock .
plt.title(stock)
Maintenant, présentons comment changer la couleur de l'étiquette. Nous pouvons le faire en modifiant notre objet axe :
ax1.xaxis.label.set_color('c') ax1.yaxis.label.set_color('r')
Si nous exécutons ceci, nous verrons que les étiquettes changent de couleur, comme dans les mots.
Ensuite, nous pouvons spécifier des numéros spécifiques pour les axes à afficher, plutôt qu'une sélection automatique comme celle-ci :
ax1.set_yticks([0,25,50,75])
Ensuite, je souhaite introduire le remplissage. Ce que fill fait, c'est remplir la couleur entre la variable et une valeur de votre choix. Par exemple, on peut faire ceci :
ax1.fill_between(date, 0, closep)
Donc voilà, notre code est :
import matplotlib.pyplot as plt import numpy as np import urllib import datetime as dt import matplotlib.dates as mdates def bytespdate2num(fmt, encoding='utf-8'): strconverter = mdates.strpdate2num(fmt) def bytesconverter(b): s = b.decode(encoding) return strconverter(s) return bytesconverter def graph_data(stock): fig = plt.figure() ax1 = plt.subplot2grid((1,1), (0,0)) stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv' source_code = urllib.request.urlopen(stock_price_url).read().decode() stock_data = [] split_source = source_code.split('\n') for line in split_source: split_line = line.split(',') if len(split_line) == 6: if 'values' not in line and 'labels' not in line: stock_data.append(line) date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data, delimiter=',', unpack=True, converters={0: bytespdate2num('%Y%m%d')}) ax1.fill_between(date, 0, closep) for label in ax1.xaxis.get_ticklabels(): label.set_rotation(45) ax1.grid(True)#, color='g', linestyle='-', linewidth=5) ax1.xaxis.label.set_color('c') ax1.yaxis.label.set_color('r') ax1.set_yticks([0,25,50,75]) plt.xlabel('Date') plt.ylabel('Price') plt.title(stock) plt.legend() plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0) plt.show() graph_data('EBAY')
Le résultat est :
Le rempli 1 Le problème est que nous pourrions finir par tout couvrir. Nous pouvons le résoudre avec transparence :
ax1.fill_between(date, 0, closep)
Maintenant, introduisons le remplissage conditionnel. Supposons que la position de départ sur le graphique soit celle où nous commençons à acheter sur eBay. Ici, si le prix est inférieur à ce prix, nous pouvons augmenter jusqu'au prix initial, puis s'il dépasse le prix initial, nous pouvons diminuer. On pourrait faire ceci :
ax1.fill_between(date, closep[0], closep)
générerait :
Si on voulait montrer le gain/perte avec des remplissages rouges et verts par rapport au prix d'origine, le remplissage vert est pour la hausse (remarque : la couleur des marchés boursiers étrangers est opposée à celle du marché national), le remplissage rouge est pour la baisse ? aucun problème! Nous pouvons ajouter un paramètre Where comme celui-ci :
ax1.fill_between(date, closep, closep[0],where=(closep > closep[0]), facecolor='g', alpha=0.5)
Ici, nous remplissons la zone entre le prix actuel et le prix d'origine, où le prix actuel est supérieur au prix d'origine. On lui donne une couleur de premier plan vert car il s'agit d'une montée, et on utilise une légère transparence.
Lignes
Nous ne pouvons toujours pas appliquer d'étiquettes aux données polygonales (comme les remplissages), mais nous pouvons implémenter des lignes vides comme avant, nous pouvons donc :
ax1.plot([],[],linewidth=5, label='loss', color='r',alpha=0.5) ax1.plot([],[],linewidth=5, label='gain', color='g',alpha=0.5) ax1.fill_between(date, closep, closep[0],where=(closep > closep[0]), facecolor='g', alpha=0.5) ax1.fill_between(date, closep, closep[0],where=(closep < closep[0]), facecolor='r', alpha=0.5)
Cela nous donne du remplissage, ainsi que des lignes vides pour la gestion des étiquettes, que nous comptons afficher dans la légende. Le code complet ici est :
import matplotlib.pyplot as plt import numpy as npimport urllib import datetime as dt import matplotlib.dates as mdates def bytespdate2num(fmt, encoding='utf-8'): strconverter = mdates.strpdate2num(fmt) def bytesconverter(b): s = b.decode(encoding) return strconverter(s) return bytesconverter def graph_data(stock): fig = plt.figure() ax1 = plt.subplot2grid((1,1), (0,0)) stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv' source_code = urllib.request.urlopen(stock_price_url).read().decode() stock_data = [] split_source = source_code.split('\n') for line in split_source: split_line = line.split(',') if len(split_line) == 6: if 'values' not in line and 'labels' not in line: stock_data.append(line) date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data, delimiter=',', unpack=True, converters={0: bytespdate2num('%Y%m%d')}) ax1.plot_date(date, closep,'-', label='Price') ax1.plot([],[],linewidth=5, label='loss', color='r',alpha=0.5) ax1.plot([],[],linewidth=5, label='gain', color='g',alpha=0.5) ax1.fill_between(date, closep, closep[0],where=(closep > closep[0]), facecolor='g', alpha=0.5) ax1.fill_between(date, closep, closep[0],where=(closep < closep[0]), facecolor='r', alpha=0.5) for label in ax1.xaxis.get_ticklabels(): label.set_rotation(45) ax1.grid(True)#, color='g', linestyle='-', linewidth=5) ax1.xaxis.label.set_color('c') ax1.yaxis.label.set_color('r') ax1.set_yticks([0,25,50,75]) plt.xlabel('Date') plt.ylabel('Price') plt.title(stock) plt.legend() plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0) plt.show() graph_data('EBAY')
Maintenant, notre résultat est :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!