我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python怎么用plotly实现绘制局部放大图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python怎么用plotly实现绘制局部放大图

这篇文章将为大家详细讲解有关python怎么用plotly实现绘制局部放大图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最终效果展示

python怎么用plotly实现绘制局部放大图

实现思路

在绘图区域插入一个嵌入图,嵌入图与原图的绘画保持一致,通过限制嵌入图的x轴和y轴的显示范围,达到缩放的效果,并在原图上绘画一个矩形框,以凸显缩放的区域,最后通过两条直线凸显缩放关系。

导入库

import plotly.io as pioimport plotly.graph_objects as goimport pandas as pdimport 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.5y1 = y1 + 0.2y2 = np.log(x)indexs = np.random.randint(0, 1000, 800)for index in indexs:    y2[index] += np.random.rand() - 0.5y3 = np.log(x)indexs = np.random.randint(0, 1000, 800)for index in indexs:    y3[index] += np.random.rand() - 0.5y3 = 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实现绘制局部放大图”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python怎么用plotly实现绘制局部放大图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python怎么用plotly实现绘制局部放大图

这篇文章将为大家详细讲解有关python怎么用plotly实现绘制局部放大图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最终效果展示实现思路在绘图区域插入一个嵌入图,嵌入图与原图的绘画保持一致,通过限制
2023-06-29

怎么用Python matplotlib plotly绘制图表

这篇文章主要讲解了“怎么用Python matplotlib plotly绘制图表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python matplotlib plotly绘制图表
2023-06-29

vue3怎么使用useMouseInElement实现图片局部放大预览效果

本文小编为大家详细介绍“vue3怎么使用useMouseInElement实现图片局部放大预览效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue3怎么使用useMouseInElement实现图片局部放大预览效果”文章能帮助大家解决
2023-07-05

JavaScript怎么实现淘宝网图片的局部放大功能

这篇“JavaScript怎么实现淘宝网图片的局部放大功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript
2023-06-30

Python怎么实现甘特图绘制

这篇“Python怎么实现甘特图绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现甘特图绘制”文章吧。前
2023-07-06

如何使用matplotlib库实现图形局部数据放大显示

本篇内容介绍了“如何使用matplotlib库实现图形局部数据放大显示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、绘制总体图形impo
2023-06-29

vue3使用useMouseInElement实现图片局部放大预览效果实例代码

现在很多的项目里面图片展示缩略图,然后点击实现图片预览,放大的功能,下面这篇文章主要给大家介绍了关于vue3使用useMouseInElement实现图片局部放大预览效果的相关资料,需要的朋友可以参考下
2023-03-19

python怎么实现多次绘制条形图

这篇“python怎么实现多次绘制条形图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python怎么实现多次绘制条形图”文
2023-06-30

Python+matplotlib怎么实现绘制等高线图

本篇内容主要讲解“Python+matplotlib怎么实现绘制等高线图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python+matplotlib怎么实现绘制等高线图”吧!1. 等高线图概
2023-06-21

怎么使用Python轻松实现绘制词云图

这篇文章主要介绍了怎么使用Python轻松实现绘制词云图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python轻松实现绘制词云图文章都会有所收获,下面我们一起来看看吧。一、一般词云绘制制作词云图首先
2023-07-02

python多线程怎么实现动态图绘制

今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、背景有些情况下,
2023-06-30

Python Pandas工具绘制数据图怎么实现

这篇文章主要为大家展示了“Python Pandas工具绘制数据图怎么实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python Pandas工具绘制数据图怎么实现”这篇文章吧。背景介绍Pa
2023-06-21

python怎么实现读取文件绘制饼状图

要实现读取文件并绘制饼状图,可以使用Python中的matplotlib库来实现。下面是一个示例代码:```pythonimport matplotlib.pyplot as plt# 读取文件数据def read_file(file_pa
2023-08-17

基于Python+Matplotlib怎么实现直方图的绘制

今天小编给大家分享一下基于Python+Matplotlib怎么实现直方图的绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-30

python数学建模之怎么使用Matplotlib实现图片绘制

本篇内容介绍了“python数学建模之怎么使用Matplotlib实现图片绘制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Matplotl
2023-07-02

基于Python+Turtle怎么实现绘制简易的大风车

本篇内容主要讲解“基于Python+Turtle怎么实现绘制简易的大风车”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python+Turtle怎么实现绘制简易的大风车”吧!Turtle绘制
2023-07-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录