<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在繪圖區域插入一個嵌入圖,嵌入圖與原圖的繪畫保持一致,通過限制嵌入圖的x軸和y軸的顯示範圍,達到縮放的效果,並在原圖上繪畫一個矩形框,以凸顯縮放的區域,最後通過兩條直線凸顯縮放關係。
import plotly.io as pio import plotly.graph_objects as go import pandas as pd import numpy as np # 設定plotly預設主題,白色主題 pio.templates.default = 'plotly_white'
# x座標 x = np.arange(1, 1001) # 生成y軸資料,並新增隨機波動 y1 = np.log(x) indexs = np.random.randint(0, 1000, 800) for index in indexs: y1[index] += np.random.rand() - 0.5 y1 = y1 + 0.2 y2 = np.log(x) indexs = np.random.randint(0, 1000, 800) for index in indexs: y2[index] += np.random.rand() - 0.5 y3 = np.log(x) indexs = np.random.randint(0, 1000, 800) for index in indexs: y3[index] += np.random.rand() - 0.5 y3 = y3 - 0.2
class LocalZoomPlot: def __init__(self, x, y, colors, x_range, scale=0.): """ :param x: x軸座標,列表型別 :param y: y軸座標,二維列表型別,例如 [y1, y2, y3] :param colors: 每個曲線的顏色,必須與 len(y) 相等 :param x_range: 需要縮放區域的x軸範圍 :param scale: 詳見 getRangeMinMaxValue 函數 """ self.x = x self.y = y self.colors = colors self.x_range = x_range self.y_range = self.getRangeMinMaxValue(x_range, scale) def getRangeMinMaxValue(self, x_range, scale=0.): """ 獲取指定x軸範圍內,所有y資料的最大值和最小值 :param x_range: 期望區域性放大的x軸範圍 :param scale: 將最大值和最小值向兩側延伸一定距離 """ min_value = np.min([np.min(arr[x_range[0]:x_range[1]]) for arr in self.y]) max_value = np.max([np.max(arr[x_range[0]:x_range[1]]) for arr in self.y]) # 按一定比例縮放 min_value = min_value - (max_value - min_value) * scale max_value = max_value + (max_value - min_value) * scale # 返回縮放後的結果 return min_value, max_value def originPlot(self, fig, **kwargs): """ 根據 y 資料繪製初始折線圖 :param fig: go.Figure範例 """ fig.add_traces([ go.Scatter(x=self.x, y=arr, opacity=0.7, marker_color=self.colors[i], **kwargs) for i, arr in enumerate(self.y) ]) return fig def insetPlot(self, fig, inset_axes): """ 在原始影象上插入嵌入圖 :param fig: go.Figure物件範例 :param inset_axes: 嵌入圖的位置和大小 [左下角的x軸位置, 左下角的y軸位置, 寬度, 高度] 所有座標都是絕對座標(0~1之間) """ # 使用建立子圖中的嵌入圖引數,建立一個嵌入圖 fig = fig.set_subplots(insets=[dict( type='xy', l=inset_axes[0], b=inset_axes[1], w=inset_axes[2], h=inset_axes[3], )]) # 嵌入圖與原始圖的繪畫一致,需要指定 xaxis 和 yaxis 引數確保是在嵌入圖上繪畫的 fig = self.originPlot(fig, xaxis='x2', yaxis='y2', showlegend=False) # 將嵌入圖的座標軸範圍限定在指定範圍 fig.update_layout( xaxis2=dict(range=self.x_range), yaxis2=dict(range=self.y_range) ) return fig def rectOriginArea(self, fig): """ 將放大的區域框起來 :param fig: go.Figure範例 """ fig.add_trace(go.Scatter( # 從左上角開始,順時針連線 x=np.array(self.x_range)[[0, 1, 1, 0, 0]], y=np.array(self.y_range)[[1, 1, 0, 0, 1]], mode='lines', line={'color': '#737473', 'dash': 'dash', 'width': 3}, showlegend=False )) return fig def addConnectLine(self, fig, area_point_num, point): """ 從放大區域指定點連線 :param fig: go.Figure範例 :param area_point_num: 放大區域的錨點,例如:(0, 0)表示放大區域的左下角座標,(0, 1)表示左上角座標, (1, 0)表示右下角座標,(1, 1)表示右上角座標,只能取這四種情況 :param point: 要進行連線的另一個點,通常位於嵌入圖附近,根據美觀程度自行指定 """ fig.add_shape(type='line', x0=self.x_range[area_point_num[0]], y0=self.y_range[area_point_num[1]], x1=point[0], y1=point[1], line={'color': '#737473', 'dash': 'dash', 'width': 1}, ) return fig
plot = LocalZoomPlot(x, [y1, y2, y3], ['#f0bc94', '#7fe2b3', '#cba0e6'], (100, 150), 0.) fig = go.Figure() fig = plot.originPlot(fig) fig = plot.insetPlot(fig, (0.4, 0.2, 0.4, 0.3)) fig = plot.rectOriginArea(fig) fig = plot.addConnectLine(fig, (0, 0), (420, -0.7)) fig = plot.addConnectLine(fig, (1, 1), (900, 2.7)) # 額外對圖片進行設定 fig.update_layout( width=800, height=600, xaxis=dict( rangemode='tozero', showgrid=False, zeroline=False, ), xaxis2=dict( showgrid=False, zeroline=False ), ) fig.show()
到此這篇關於python用plotly實現繪製區域性放大圖的文章就介紹到這了,更多相關python plotly繪製區域性放大圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45