日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

瀏覽:35日期:2022-06-29 09:30:13

創(chuàng)建一個(gè)優(yōu)秀的可視化圖表的關(guān)鍵在于引導(dǎo)讀者,讓他們能理解圖表所講述的故事。在一些情況下,這個(gè)故事可以通過(guò)純圖像的方式表達(dá),不需要額外添加文字,但是在另外一些情況中,圖表需要文字的提示和標(biāo)簽才能將故事講好。也許標(biāo)注最基本的類型就是圖表的標(biāo)簽和標(biāo)題,但是其中的選項(xiàng)參數(shù)卻有很多。讓我們?cè)诒竟?jié)中使用一些數(shù)據(jù)來(lái)創(chuàng)建可視化圖表并標(biāo)注這些圖表來(lái)表達(dá)這些有趣的信息。首先還是需要將要用到的模塊和包導(dǎo)入Pycharm:

import matplotlib.pyplot as pltimport matplotlib as mplplt.style.use(’seaborn-whitegrid’)import numpy as npimport pandas as pd例子:節(jié)假日對(duì)美國(guó)出生率的影響

本例中的數(shù)據(jù)可以在 https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv 下載。

我們先按照前面的方式進(jìn)行同樣的數(shù)據(jù)清洗程序,然后以圖表展示這個(gè)結(jié)果:

births = pd.read_csv(r’D:pythonGithub學(xué)習(xí)材料Python數(shù)據(jù)科學(xué)手冊(cè)databirths.csv’)quartiles = np.percentile(births[’births’], [25, 50, 75])mu, sig = quartiles[1], 0.74 * (quartiles[2] - quartiles[0])births = births.query(’(births > @mu - 5 * @sig) & (births < @mu + 5 * @sig)’)births[’day’] = births[’day’].astype(int)births.index = pd.to_datetime(10000 * births.year + 100 * births.month + births.day, format=’%Y%m%d’)births_by_date = births.pivot_table(’births’, [births.index.month, births.index.day])births_by_date.index = [pd.datetime(2012, month, day) for (month, day) in births_by_date.index]

fig, ax = plt.subplots(figsize=(12, 4))births_by_date.plot(ax=ax);

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

當(dāng)我們繪制了這樣的圖表來(lái)表達(dá)數(shù)據(jù)時(shí),如果我們能對(duì)一些圖表的特性作出標(biāo)注來(lái)吸引讀者的注意力通常是非常有幫助的。這可以通過(guò)調(diào)用plt.text或ax.text函數(shù)來(lái)實(shí)現(xiàn),它們可以在某個(gè)特定的 x,y 軸位置輸出一段文字:

fig, ax = plt.subplots(figsize=(12, 4))births_by_date.plot(ax=ax)# 在折線的特殊位置標(biāo)注文字style = dict(size=10, color=’gray’)ax.text(’2012-1-1’, 3950, 'New Year’s Day', **style)ax.text(’2012-7-4’, 4250, 'Independence Day', ha=’center’, **style)ax.text(’2012-9-4’, 4850, 'Labor Day', ha=’center’, **style)ax.text(’2012-10-31’, 4600, 'Halloween', ha=’right’, **style)ax.text(’2012-11-25’, 4450, 'Thanksgiving', ha=’center’, **style)ax.text(’2012-12-25’, 3850, 'Christmas ', ha=’right’, **style)# 設(shè)置標(biāo)題和y軸標(biāo)簽ax.set(title=’USA births by day of year (1969-1988)’, ylabel=’average daily births’)# 設(shè)置x軸標(biāo)簽月份居中ax.xaxis.set_major_locator(mpl.dates.MonthLocator())ax.xaxis.set_minor_locator(mpl.dates.MonthLocator(bymonthday=15))ax.xaxis.set_major_formatter(plt.NullFormatter())ax.xaxis.set_minor_formatter(mpl.dates.DateFormatter(’%h’));

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

ax.text方法接收 x 位置、y 位置、一個(gè)字符串和額外可選的關(guān)鍵字參數(shù)可以用來(lái)設(shè)置顏色、大小、樣式、對(duì)齊等文本格式。上面我們使用了ha=’right’和ha=’center’,這里的ha是*hirizonal alignment(水平對(duì)齊)*的縮寫。要查閱更多的可用參數(shù),請(qǐng)查看plt.text()和mpl.text.Text()的文檔字符串內(nèi)容。

轉(zhuǎn)換和文本位置

在剛才的例子中,我們將文字標(biāo)注根據(jù)數(shù)據(jù)位置進(jìn)行了定位。有些時(shí)候我們需要將文字標(biāo)注獨(dú)立于數(shù)據(jù)位置而根據(jù)圖表位置進(jìn)行定位。Matplotlib 通過(guò)轉(zhuǎn)換完成這項(xiàng)工作。

任何的圖形顯示框架都需要在坐標(biāo)系統(tǒng)之間進(jìn)行轉(zhuǎn)換的機(jī)制。例如,一個(gè)數(shù)據(jù)點(diǎn)位于 被轉(zhuǎn)換為圖表中的某個(gè)位置,進(jìn)而轉(zhuǎn)換為屏幕上顯示的像素。這樣的坐標(biāo)轉(zhuǎn)換在數(shù)學(xué)上都相對(duì)來(lái)說(shuō)比較直接,,而且 Matplotlib 提供了一系列的工具實(shí)現(xiàn)了轉(zhuǎn)換(這些工具可以在matplotlib.transforms模塊中找到)。

一般來(lái)說(shuō),用戶很少需要關(guān)注這些轉(zhuǎn)換的細(xì)節(jié),但是當(dāng)考慮將文本在圖表上展示時(shí),這些知識(shí)卻比較有用。在這種情況中,下面三種定義好的轉(zhuǎn)換是比較有用的:

ax.transData:與數(shù)據(jù)坐標(biāo)相關(guān)的轉(zhuǎn)換 ax.tranAxes:與 Axes 尺寸相關(guān)的轉(zhuǎn)換(單位是 axes 的寬和高) ax.tranFigure:與 figure 尺寸相關(guān)的轉(zhuǎn)換(單位是 figure 的寬和高)

下面我們來(lái)看看使用這些轉(zhuǎn)換將文字寫在圖表中不同位置的例子:

fig, ax = plt.subplots(facecolor=’lightgray’)ax.axis([0, 10, 0, 10])# transform=ax.transData是默認(rèn)的,這里寫出來(lái)是為了明確對(duì)比ax.text(1, 5, '. Data: (1, 5)', transform=ax.transData)ax.text(0.5, 0.1, '. Axes: (0.5, 0.1)', transform=ax.transAxes)ax.text(0.2, 0.2, '. Figure: (0.2, 0.2)', transform=fig.transFigure);

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

注意默認(rèn)情況下,文字是在指定坐標(biāo)位置靠左對(duì)齊的:這里每個(gè)字符串開(kāi)始的'.'的位置就是每種轉(zhuǎn)換的坐標(biāo)位置。

transData坐標(biāo)給定的是通常使用的 x 和 y 軸坐標(biāo)位置。transAxes坐標(biāo)給定的是從 axes 左下角開(kāi)始算起(白色區(qū)域)的坐標(biāo)位置,使用的是寬度和長(zhǎng)度的占比。transFigure坐標(biāo)類似,給定的是從 figure 左下角開(kāi)始算起(灰色區(qū)域)的坐標(biāo)位置,使用的也是寬度和長(zhǎng)度的占比。

因此如果我們改變了軸的最大長(zhǎng)度,只有transData坐標(biāo)會(huì)收到影響,其他兩個(gè)還是保持在相同位置:

ax.set_xlim(0, 2)ax.set_ylim(-6, 6)fig

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

這個(gè)變化可以通過(guò)動(dòng)態(tài)改變軸的最大長(zhǎng)度看的更加清楚:如果你在 notebook 執(zhí)行這段代碼,你可以將%matplotlib inline改為%matplotlib notebook,然后使用圖表的菜單來(lái)交互式的改變圖表。

箭頭和標(biāo)注

除了刻度標(biāo)簽和文字標(biāo)簽,另一種常用的標(biāo)注是箭頭。

在 Matplotlib 中繪制箭頭通常比你想象的難得多。雖然有plt.arrow()函數(shù),作者不建議使用它:這個(gè)函數(shù)繪制的箭頭是一個(gè) SVG 對(duì)象,因此在圖表使用不同的比例的情況會(huì)產(chǎn)生問(wèn)題,結(jié)果通常不能讓用戶滿意。因此,作者建議使用plt.annotate()函數(shù)。這個(gè)函數(shù)會(huì)繪制一些文字以及一個(gè)箭頭,并且箭頭可以非常靈活的進(jìn)行配置。

下面我們提供一些參數(shù)來(lái)使用annotate函數(shù):

fig, ax = plt.subplots()x = np.linspace(0, 20, 1000)ax.plot(x, np.cos(x))ax.axis(’equal’)ax.annotate(’local maximum’, xy=(6.28, 1), xytext=(10, 4), arrowprops=dict(facecolor=’black’, shrink=0.05))ax.annotate(’local minimum’, xy=(5 * np.pi, -1), xytext=(2, -6), arrowprops=dict(arrowstyle='->', connectionstyle='angle3,angleA=0,angleB=-90'));

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

箭頭的樣式是使用箭頭屬性字典值進(jìn)行控制的,里面有很多可用的參數(shù)。這些參數(shù)在 Matplotlib 的在線文檔中已經(jīng)有了很詳細(xì)的說(shuō)明,因此在這里就不將這部分內(nèi)容重復(fù)介紹一遍了。我們?cè)谇懊娉錾蕡D上再使用一些參數(shù)進(jìn)行更多的說(shuō)明:

fig, ax = plt.subplots(figsize=(12, 4))births_by_date.plot(ax=ax) # 為圖表添加標(biāo)注ax.annotate('New Year’s Day', xy=(’2012-1-1’, 4100), xycoords=’data’, xytext=(50, -30), textcoords=’offset points’, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=-0.2')) ax.annotate('Independence Day', xy=(’2012-7-4’, 4250), xycoords=’data’, bbox=dict(boxstyle='round', fc='none', ec='gray'), xytext=(10, -40), textcoords=’offset points’, ha=’center’, arrowprops=dict(arrowstyle='->')) ax.annotate(’Labor Day’, xy=(’2012-9-4’, 4850), xycoords=’data’, ha=’center’, xytext=(0, -20), textcoords=’offset points’)ax.annotate(’’, xy=(’2012-9-1’, 4850), xytext=(’2012-9-7’, 4850), xycoords=’data’, textcoords=’data’, arrowprops={’arrowstyle’: ’|-|,widthA=0.2,widthB=0.2’, }) ax.annotate(’Halloween’, xy=(’2012-10-31’, 4600), xycoords=’data’, xytext=(-80, -40), textcoords=’offset points’, arrowprops=dict(arrowstyle='fancy', fc='0.6', ec='none', connectionstyle='angle3,angleA=0,angleB=-90')) ax.annotate(’Thanksgiving’, xy=(’2012-11-25’, 4500), xycoords=’data’, xytext=(-120, -60), textcoords=’offset points’, bbox=dict(boxstyle='round4,pad=.5', fc='0.9'), arrowprops=dict(arrowstyle='->', connectionstyle='angle,angleA=0,angleB=80,rad=20')) ax.annotate(’Christmas’, xy=(’2012-12-25’, 3850), xycoords=’data’, xytext=(-30, 0), textcoords=’offset points’, size=13, ha=’right’, va='center', bbox=dict(boxstyle='round', alpha=0.1), arrowprops=dict(arrowstyle='wedge,tail_width=0.5', alpha=0.1)); # 設(shè)置圖表標(biāo)題和坐標(biāo)軸標(biāo)記ax.set(title=’USA births by day of year (1969-1988)’, ylabel=’average daily births’) # 設(shè)置月份坐標(biāo)居中顯示ax.xaxis.set_major_locator(mpl.dates.MonthLocator())ax.xaxis.set_minor_locator(mpl.dates.MonthLocator(bymonthday=15))ax.xaxis.set_major_formatter(plt.NullFormatter())ax.xaxis.set_minor_formatter(mpl.dates.DateFormatter(’%h’)); ax.set_ylim(3600, 5400);

python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注

上圖中箭頭和文字框都非常詳盡了:可以看出你幾乎可以使用plt.annotate創(chuàng)建任何你想要的箭頭樣式。不幸的是,這意味著這種特性都需要手工進(jìn)行調(diào)整,因此如果需要獲得印刷質(zhì)量的圖像,這將是一個(gè)非常耗費(fèi)時(shí)間的工作。最后,必須指出,上述這種多種樣式混合的方式來(lái)展現(xiàn)數(shù)據(jù)肯定不是最佳實(shí)踐,這里只是為了盡可能多的介紹可用的參數(shù)。

更多關(guān)于 Matplotlib 的箭頭和標(biāo)注樣式的討論和例子可以訪問(wèn) Matplotlib gallery。

以上就是python Matplotlib基礎(chǔ)--如何添加文本和標(biāo)注的詳細(xì)內(nèi)容,更多關(guān)于python Matplotlib添加文本和標(biāo)注的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产精品久久w女人spa| 久久精品免费一区二区三区| 激情综合亚洲| 色爱综合av| 亚洲手机视频| 久久亚洲视频| 国产日韩三级| av日韩中文| 影音先锋国产精品| 一区二区三区网站| 国产精品1区在线| 国产v日韩v欧美v| 91精品国产自产在线观看永久∴| 久久精品观看| 免费中文字幕日韩欧美| 亚洲欧美日韩综合国产aⅴ| 亚洲我射av| 久久久久黄色| 欧美性感美女一区二区| 久久av一区二区三区| 日韩有码av| 精品久久久网| 亚洲精品va| 91精品日本| 日韩欧美一区二区三区免费看| 九色精品91| 日韩国产欧美一区二区三区| 精品理论电影在线| 好看不卡的中文字幕| 国产麻豆一区二区三区| 欧美久久天堂| 日韩一级欧洲| 国产欧美在线观看免费| 日韩欧美不卡| 日韩激情av在线| 天堂日韩电影| 综合五月婷婷| av在线最新| 日韩精品三区四区| 在线观看精品| 国产亚洲高清一区| 国产综合亚洲精品一区二| 97久久精品| 久久久久午夜电影| 日韩综合小视频| 98精品久久久久久久| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品二区影院| 国产一区亚洲| 欧美精品成人| 首页亚洲欧美制服丝腿| 国产成人精品福利| 日韩手机在线| 久久亚洲国产| 免费精品一区| 天海翼精品一区二区三区| 日韩在线高清| 国产精品久久国产愉拍| 国产亚洲永久域名| 日本蜜桃在线观看视频| 国产精品视频一区二区三区综合| 久久九九99| 久久久精品国产**网站| 亚洲欧美在线综合| 欧美日韩黑人| 欧美亚洲日本精品| 国产精品久久久久久久久久久久久久久 | 欧美亚洲免费| 色婷婷精品视频| 国产精品v一区二区三区| 亚洲欧美日韩综合国产aⅴ| 久久夜夜操妹子| 精品亚洲二区| 国产精品v一区二区三区| 亚洲精品日本| 好看的av在线不卡观看| 久久久久91| 国产欧美一区二区三区精品酒店| 欧美亚洲色图校园春色| 免费观看在线色综合| 激情欧美国产欧美| 少妇久久久久| 久久久久久色 | 欧美天堂在线| 亚洲一区二区日韩| 久久国产66| 久久99伊人| 玖玖精品视频| 在线看片一区| 亚洲一二三区视频| 亚洲一区有码| 婷婷中文字幕一区| 亚洲激情中文在线| 五月激情久久| 欧美日韩精品免费观看视完整| 在线看片福利| 国产一区二区三区四区| 久久久精品区| 日本久久精品| 麻豆成全视频免费观看在线看| 欧美激情 亚洲a∨综合| 国产精品一区二区av日韩在线| 国产日韩欧美一区| 欧美成a人片免费观看久久五月天| 欧美日韩国产一区二区在线观看| 日韩综合小视频| 日韩精品一区二区三区中文 | 免费看日韩精品| 中文字幕av亚洲精品一部二部| 热久久久久久久| 中文精品电影| 欧美亚洲人成在线| 精品成av人一区二区三区| 成人三级高清视频在线看| 久久久久蜜桃| 蜜臀av一区二区三区| 免费人成在线不卡| 欧美日韩黄网站| 久久久久久色 | 免费黄色成人| 爽好多水快深点欧美视频| 日韩av中文在线观看| 久久免费精品| 99久久九九| 中文字幕一区二区三区日韩精品| 日韩av电影一区| 国产精品v一区二区三区| 激情黄产视频在线免费观看| 中文在线а√在线8| 99亚洲视频| 国产日韩欧美一区二区三区| 国产精品伦理久久久久久| 黄页网站一区| 国产精品综合色区在线观看| 日韩在线免费| 免费在线观看日韩欧美| 国产精品xxx在线观看| 国产成人精品亚洲日本在线观看| 婷婷综合社区| 国产日韩高清一区二区三区在线 | 日韩中文字幕1| 国产精品一区二区中文字幕| 日韩在线欧美| 亚洲精品在线二区| 成人亚洲欧美| 中文字幕av一区二区三区四区| 精品美女在线视频| 视频一区二区不卡| 一区二区三区四区日本视频| 亚洲一区二区三区四区电影| 精品免费av| 免费人成在线不卡| 久久久久黄色| 中文字幕av亚洲精品一部二部| 日韩av二区| 亚洲精品自拍| 久久一级电影| 欧美激情亚洲| 中文不卡在线| 欧美日韩亚洲在线观看| 国产精品九九| 视频一区国产视频| 久久精品青草| 久久一区精品| 婷婷成人av| 亚洲女同一区| 97精品国产一区二区三区| 日韩精品a在线观看91| 激情欧美日韩一区| 精品无人区麻豆乱码久久久| 亚洲精品进入| 好看不卡的中文字幕| 色乱码一区二区三区网站| 日韩精品亚洲专区在线观看| 国产91久久精品一区二区| 欧美激情在线精品一区二区三区| 亚洲欧美日韩精品一区二区 | 免费日韩一区二区| 国产成人免费| 国产乱子精品一区二区在线观看| 亚洲欧美日韩综合国产aⅴ| 日韩欧美三级| 高清在线一区| 麻豆国产欧美一区二区三区 | 视频一区免费在线观看| 婷婷国产精品| 91看片一区| 麻豆网站免费在线观看| 国产精品a级| 久久精品99久久久| 亚洲精品一二三**| 亚洲国产一区二区在线观看| 亚洲精品88| 91欧美在线| 国产精品99一区二区三| 久久伊人久久| 麻豆一区二区99久久久久| 欧美久久一区二区三区| 91成人在线| 国产午夜久久av|