Maison > développement back-end > Tutoriel Python > Remplissage des couleurs et des lignes graphiques dans Matplotlib

Remplissage des couleurs et des lignes graphiques dans Matplotlib

爱喝马黛茶的安东尼
Libérer: 2019-06-04 16:31:40
avant
4553 Les gens l'ont consulté

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.

Remplissage des couleurs et des lignes graphiques dans Matplotlib

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)
Copier après la connexion

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')
Copier après la connexion

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])
Copier après la connexion

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)
Copier après la connexion
Copier après la connexion

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')
Copier après la connexion

Le résultat est :

Remplissage des couleurs et des lignes graphiques dans Matplotlib

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)
Copier après la connexion
Copier après la connexion

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)
Copier après la connexion

générerait :

Remplissage des couleurs et des lignes graphiques dans Matplotlib

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)
Copier après la connexion

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)
Copier après la connexion

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=&#39;g&#39;, 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')
Copier après la connexion

Maintenant, notre résultat est :

Remplissage des couleurs et des lignes graphiques dans Matplotlib

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal