Heim > Backend-Entwicklung > Python-Tutorial > Füllen von grafischen Farben und Linien in Matplotlib

Füllen von grafischen Farben und Linien in Matplotlib

爱喝马黛茶的安东尼
Freigeben: 2019-06-04 16:31:40
nach vorne
4556 Leute haben es durchsucht

Matplotlib ist eine Python 2D-Plot-Bibliothek, die Grafiken in Publikationsqualität in verschiedenen Papierformaten und interaktiven Umgebungen auf verschiedenen Plattformen erstellen kann.

Füllen von grafischen Farben und Linien in Matplotlib

Im letzten Tutorial zur Matplotlib-Datenvisualisierung stellen wir vor, wie man gestapelte Diagramme und Kreisdiagramme erstellt. Was ich Ihnen heute vorstelle, ist das Füllen mit grafischen Farben und Linien.


Farbe

Die erste Änderung, die wir vornehmen möchten, besteht darin, plt.title in die Variable stock zu ändern .

plt.title(stock)
Nach dem Login kopieren

Lassen Sie uns nun vorstellen, wie Sie die Etikettenfarbe ändern. Wir können dies tun, indem wir unser Achsenobjekt ändern:

ax1.xaxis.label.set_color('c')
ax1.yaxis.label.set_color('r')
Nach dem Login kopieren

Wenn wir dies ausführen, werden wir sehen, dass die Beschriftungen ihre Farbe ändern, genau wie bei Worten.

Als nächstes können wir spezifische Nummern für die anzuzeigenden Achsen angeben, anstatt eine automatische Auswahl wie diese:

ax1.set_yticks([0,25,50,75])
Nach dem Login kopieren

Als nächstes möchte ich Padding einführen. Mit „fill“ wird die Farbe zwischen der Variablen und einem Wert Ihrer Wahl gefüllt. Zum Beispiel können wir Folgendes tun:

ax1.fill_between(date, 0, closep)
Nach dem Login kopieren
Nach dem Login kopieren

Hier lautet unser Code also:

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')
Nach dem Login kopieren

Das Ergebnis ist:

Füllen von grafischen Farben und Linien in Matplotlib

Das Gefüllte 1. Das Problem ist, dass wir am Ende möglicherweise alles abdecken. Wir können es mit Transparenz lösen:

ax1.fill_between(date, 0, closep)
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt führen wir die bedingte Füllung ein. Nehmen wir an, dass die Startposition im Diagramm die Stelle ist, an der wir mit dem Kauf bei eBay beginnen. Wenn der Preis hier unter diesem Preis liegt, können wir auf den ursprünglichen Preis aufstocken, und wenn er dann über dem ursprünglichen Preis liegt, können wir auf den ursprünglichen Preis aufstocken. Wir könnten Folgendes tun:

ax1.fill_between(date, closep[0], closep)
Nach dem Login kopieren

würde Folgendes generieren:

Füllen von grafischen Farben und Linien in Matplotlib

Wenn wir den Gewinn/Verlust mit roten und grünen Füllungen im Vergleich zum ursprünglichen Preis anzeigen wollten, Die grüne Füllung steht für einen Anstieg (Hinweis: Die Farbe ausländischer Aktienmärkte ist entgegengesetzt zu der inländischen), die rote Füllung steht für einen Rückgang? Kein Problem! Wir können einen Where-Parameter wie diesen hinzufügen:

ax1.fill_between(date, closep, closep[0],where=(closep > closep[0]), facecolor='g', alpha=0.5)
Nach dem Login kopieren

Hier füllen wir den Bereich zwischen dem aktuellen Preis und dem Originalpreis, in dem der aktuelle Preis höher als der Originalpreis ist. Wir geben ihm eine grüne Vordergrundfarbe, da es sich um eine Erhöhung handelt, und verwenden eine leichte Transparenz.

Linien

Wir können immer noch keine Beschriftungen auf polygonale Daten anwenden (wie Füllungen), aber wir können leere Linien wie zuvor implementieren, sodass wir:

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)
Nach dem Login kopieren

Dadurch erhalten wir etwas Auffüllung sowie Leerzeilen für die Handhabung von Beschriftungen, die wir in der Legende anzeigen möchten. Der vollständige Code hier lautet:

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')
Nach dem Login kopieren

Jetzt ist unser Ergebnis:

Füllen von grafischen Farben und Linien in Matplotlib

Das obige ist der detaillierte Inhalt vonFüllen von grafischen Farben und Linien in Matplotlib. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage