Das Beispiel stammt aus diesem Buch: „Python Programming from Introduction to Practical Combat“ [US] Eric Matthes
Mit Pyplot-Zeichnung, allgemeine Importmethodeimport matplotlib.pyplot as plt
Die folgenden Codes werden im Jupyter Notebook ausgeführt
Schauen wir uns zunächst ein einfaches Beispiel an
import matplotlib.pyplot as plt in_values = [1, 2 ,3, 4, 5] squares = [1, 4, 9 ,16, 25]# 第一个参数是X轴输入,第二个参数是对应的Y轴输出;linewidth绘制线条的粗细plt.plot(in_values, squares, linewidth=4)# 标题、X轴、Y轴plt.title('Squares', fontsize=20) plt.xlabel('Value', fontsize=12) plt.ylabel('Square of the value', fontsize=12)# plt.tick_params(axis='both', labelsize=15)plt.show()
Wie im Bild unten gezeigt, können Sie sehen, dass die x-Achse zu dicht ist und sogar Dezimalstellen aufweist.
Wenn Sie möchten, dass nur unsere Beispielwerte auf der x-Achse erscheinen, können Sie mit der Funktion tick_params
die Größe der Teilstriche ändern. Kommentieren Sie die vorletzte Zeile im obigen Code aus, um das Bild unten zu erhalten.
plt.tick_params(axis='both', labelsize=15)
, wobei axis=both
den Maßstab darstellt, der sich sowohl auf die x- als auch auf die y-Achse auswirkt. labelsize
gibt die Schriftgröße des Maßstabs an Je weniger Koordinatenpunkte vorhanden sind, desto größer und gleich lang dargestellt wird und umgekehrt. Da labelsize
größer als der Standardwert eingestellt ist, wird die Anzahl der auf der x- und y-Achse angezeigten Koordinatenpunkte kleiner. Passt eher zu diesem Beispiel.
Immer noch das quadratische Beispiel oben. Diesmal anhand eines Streudiagramms dargestellt.
in_values = [1, 2 ,3, 4, 5] squares = [1, 4, 9 ,16, 25]# s参数为点的大小plt.scatter(in_values, squares, s=80) plt.title('Squares', fontsize=20) plt.xlabel('Value', fontsize=12) plt.ylabel('Square of the value', fontsize=12) plt.tick_params(axis='both', labelsize=15) plt.show()
Wie Sie sehen, ersetzen Sie einfach plt.plot
durch plt.scatter
, und der Rest des Codes bleibt im Grunde unverändert.
Wenn es viele Ein- und Ausgabepunkte gibt, können Listenverständnisse verwendet werden. Gleichzeitig können Sie die Farbe der Punkte und die Farbe der Umrisse der Punkte festlegen. Die Standardpunktfarbe ist blau und der Umriss ist schwarz.
x_values = list(range(1, 100)) y_values = [x**2 for x in x_values]# c参数指定点的颜色,轮廓的颜色不进行设置(none)plt.scatter(x_values, y_values, c='red', edgecolors='none' ,s=5)# x、y轴的坐标范围,注意提供一个列表,前两个是x轴的范围,后两个是y轴的范围plt.axis([0, 110, 0, 11000]) plt.show()
Die Farbanpassung kann auch den RGB-Modus verwenden und ein Tupel an Parameter c übergeben. Das Tupel enthält drei Zahlen zwischen [0, 1], die jeweils (R, G, B) darstellen. Je näher die Zahl an 0 liegt, desto heller ist die Farbe, und je näher die Zahl an 1 liegt, desto dunkler ist die Farbe. Beispielsweise steht c=(0, 0 , 0.6)
für eine hellblaue Farbe.
Es ist immer noch ein quadratisches Bild, daher bin ich zu faul, einen Titel zu schreiben.
Eine Farbkarte ist normalerweise ein Farbverlauf einer Reihe von Farben. Bei der Visualisierung kann die Farbzuordnung die Muster von Daten widerspiegeln. Beispielsweise haben hellere Farben kleinere Werte und dunklere Farben größere Werte.
Sehen Sie sich ein sehr einfaches Beispiel an: Zuordnung basierend auf der Größe des Y-Achsen-Koordinatenwerts.
x_values = list(range(1, 100)) y_values = [x**2 for x in x_values]# 颜色映射,按照y轴的值从浅到深,颜色采用蓝色plt.scatter(x_values, y_values, c=x_values, cmap=plt.cm.Blues, edgecolors='none' ,s=5) plt.axis([0, 110, 0, 11000])# 取代show方法,保存图片到文件所在目录,bbox_inches='tight'可裁去多余的白边plt.savefig('squares_plot.png', bbox_inches='tight')
Es ist zu erkennen, dass die Farbe von Punkten mit kleinem y-Wert sehr hell und fast unsichtbar ist, je mehr der y-Wert zunimmt, desto dunkler wird die Farbe.
Schreiben Sie zunächst eine Random-Walk-Klasse. Der Zweck besteht darin, zufällig die Richtung auszuwählen, in die Sie sich vorwärts bewegen möchten
from random import choicedef get_step():""" 获得移动的步长 """# 分别代表正半轴和负半轴direction = choice([1, -1])# 随机选择一个距离distance = choice([0, 1, 2, 3, 4]) step = direction * distancereturn stepclass RandomWalk:""" 一个生成随机漫步数据的类 """# 默认漫步5000步def __init__(self, num_points=5000):self.num_points = num_pointsself.x_values = [0]self.y_values = [0]def fill_walk(self):""" 计算随机漫步包含的所有点 """while len(self.x_values) < self.num_points: x_step = get_step() y_step = get_step()# 没有位移,跳过不取if x_step == 0 and y_step == 0:continue# 计算下一个点的x和y, 第一次为都0,以前的位置 + 刚才的位移 = 现在的位置next_x = self.x_values[-1] + x_step next_y = self.y_values[-1] + y_stepself.x_values.append(next_x)self.y_values.append(next_y)
Beginnen Sie mit dem Zeichnen der Bilder, die durch
import matplotlib.pyplot as plt rw = RandomWalk() rw.fill_walk()# figure的调用在plot或者scatter之前# plt.figure(dpi=300, figsize=(10, 6))# 这个列表包含了各点的漫步顺序,第一个元素将是漫步的起点,最后一个元素是漫步的终点point_numbers = list(range(rw.num_points))# 使用颜色映射绘制颜色深浅不同的点,浅色的是先漫步的,深色是后漫步的,因此可以反应漫步轨迹plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, s=1)# 突出起点plt.scatter(0, 0, c='green', edgecolors='none', s=50)# 突出终点plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', s=50)# 隐藏坐标轴plt.axes().get_xaxis().set_visible(False) plt.axes().get_yaxis().set_visible(False)# 指定分辨率和图像大小,单位是英寸plt.show()
, dicht gepackte Punkte, erzeugt werden. Aus der Ferne sieht es ganz gut aus. Der grüne ist der Startpunkt des Spaziergangs und der rote ist der Endpunkt des Spaziergangs.
Aber das Bild ist etwas unklar, also entkommentieren Sie die Zeile unten rw.fill_walk()
. Wird normalerweise vor der Zeichnung aufgerufen.
plt.figure(dpi=300, figsize=(10, 6))
, dpi=300
beträgt 300 Pixel/Zoll. Dies kann entsprechend erhöht werden, um klare Bilder zu erhalten. figsize=(10, 6)
Der übergebene Parameter ist ein Tupel, der die Größe des Zeichenfensters, also die Größe des Bildes, in Zoll darstellt.
Hochauflösende Bilder, gefällt es dir?
Möglicherweise müssen wir die von anderen bereitgestellten Daten analysieren. Im Allgemeinen handelt es sich um Dateien in zwei Formaten: JSON und CSV. Hier sind Wetterdaten sitka_weather_2014.csv
, die Wetterdaten von Sitka, USA im Jahr 2014. Matplotlib wird hier zum Verarbeiten von CSV-Dateien verwendet, und die Verarbeitung von JSON-Dateien wird in Pygal abgelegt.
Laden Sie die Daten sitka_weather_2014.csv herunter
Die erste Zeile der CSV-Datei ist normalerweise der Header, und die eigentlichen Daten beginnen in der zweiten Zeile. Schauen wir uns zunächst an, welche Daten der Tabellenkopf enthält.
import csv filename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'with open(filename) as f: reader = csv.reader(f)# 只调用了一次next,得到第一行表头header_row = next(reader)for index, column_header in enumerate(header_row):print(index, column_header)
Drucken Sie wie folgt
0 AKST 1 Max TemperatureF 2 Mean TemperatureF 3 Min TemperatureF 4 Max Dew PointF 5 MeanDew PointF 6 Min DewpointF 7 Max Humidity 8 Mean Humidity 9 Min Humidity ...
Uns interessieren die Höchst- und Tiefsttemperaturen und wir brauchen nur die Spalte 1 und 3s Daten reichen aus. Darüber hinaus befinden sich die Datumsdaten in Spalte 1.
Der nächste Schritt ist nicht schwer. Tragen Sie ab der zweiten Zeile die höchste Temperatur in die Höchsttemperaturliste, die niedrigste Temperatur in die Tiefsttemperaturliste und das Datum in die Datumsliste ein. Wir möchten das Datum auf der x-Achse anzeigen und das Datum-Uhrzeit-Modul einführen.
import csvimport matplotlib.pyplot as pltfrom datetime import datetime filename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'with open(filename) as f: reader = csv.reader(f)# 只调用了一次next,得到第一行表头header_row = next(reader)# 第一列是最高气温,由于上面next读取过一行了,这里实际从第二行开始,也是数据开始的那行# reader只能读取一次,所以如下写法dates为空# highs = [int(row[1]) for row in reader]# dates= [row[0] for row in reader]dates, highs, lows = [], [], []for row in reader:# 捕获异常,防止出现数据为空的情况try: date = datetime.strptime(row[0], '%Y-%m-%d')# 第1列最高气温,读取到是字符串,转为inthigh = int(row[1])# 第3列最低气温low = int(row[3])except ValueError:print(date, 'missing data')else: dates.append(date) highs.append(high) lows.append(low)# figure在plot之前调用fig = plt.figure(dpi=300, figsize=(10, 6))# 最高气温的折线图plt.plot(dates, highs, c='red')# 最低气温的折线图plt.plot(dates, lows, c='blue')# 在两个y值之间填充颜色,facecolor为填充的颜色,alpha参数可指定颜色透明度,0.1表示颜色很浅接近透明plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) plt.title('Daily high and low temperatures - 2014', fontsize=20) plt.xlabel('', fontsize=16) plt.ylabel('Temperature(F)', fontsize=16)# x轴的日期调整为斜着显示fig.autofmt_xdate() plt.tick_params(axis='both',labelsize=15) plt.show()
看以看出,7月到9月都很热,但是5月出现过非常高的气温!
上面的代码有一行date = datetime.strptime(row[0], '%Y-%m-%d')
。注意%Y-%m-%d
要和row[0]
字符串的格式一致。举个例子
# 下面这句报错time data '2017/6/23' does not match format '%Y-%m-%d'print(datetime.strptime('2017/6/22', '%Y-%m-%d')) print(datetime.strptime('2017-6-22', '%Y-%m-%d'))
%Y
指的是四位的年份, %y
是两位年份,%m
是数字表示的月份,%d
数字表示的月份中的一天。
by @sunhaiyu
2017.6.22
Das obige ist der detaillierte Inhalt vonErste Einführung in Matplotlib. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!