添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1、绘图横纵坐标轴倒转问题

今天使用了python绘制二维图像,但是绘制出来的结果图发现x轴和y轴发生了翻转,大概是这样:左图为实际得到的不理想结果,右图为理论上应该得到的结果,即,理论上应该得到的结果是关于y轴对称的,但是实际得到的结果是关于x轴对称的。

2.矩阵和绘图规则

在写矩阵和绘图规则之前,先明确一个概念,每行元素对应的索引和列的索引相同,每列元素对应的索引和行的索引相同。

(1)矩阵规则

使用numpy生成一个三行四列的矩阵:

import numpy as np
a = np.zeros((3, 4)

a的生成结果如下:

如果生成一个二维矩阵,我们会习惯性地把第一个数默认为x,第二个默认为y,也就是:

a = np.zeros((x, y))

而根据生成的结果我们可以知道x对应的为行数(等于每列元素的个数),y对应的为列数(等于每行元素的个数),x和y对应的分别是行的索引(0,1,2)和列的索引(0,1,2,3)。

(2)绘图规则

当我们绘制图像时x轴对应的为横行(以行元素索引为横坐标(0,1,2,3),其长度和列的数量相等),y轴对应的为列(以列元素的索引为纵坐标(0,1,2),其长度和行的数量相等),见下图:

import matplotlib.pyplot as plt
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

(3)翻转原因

我们一般希望x轴的长度和每行元素的个数相等,y轴的长度和每列元素的个数相等,即以每行的元素的索引作为横坐标,以每列的元素的索引作为纵坐标;但是在矩阵中x、y对应的分别是行的索引和列的索引而不是每行元素和每列元素的索引,这个时候就可能发生坐标轴翻转的问题。

举一个简单的例子,给一个索引值(2,1),我们常规的习惯一般会先横着数,再竖着数(图中蓝框圈出来的数);但是在python的矩阵中,这个索引值代表的含义是第二行第一列对应的数,就需要先竖着数再横着数(图中红框圈出来的数)。

总结来说,我们很容易将每行(每列)元素的索引和行(列)的索引混用,一旦混用就会出现坐标轴翻转的问题。

对于这个问题,我们可以通过人为调转坐标轴,或者将要绘制的二维数组转置来解决这个问题。

3.解决方案

以笔者的问题为例展示此类问题的解决方案。

# 修改前的代码(t是一个三维矩阵,np.meshgrid的作用是生成网格点坐标矩阵)
X, Y = np.meshgrid(x, y)
plt.contourf(X, Y, t, 30)
# 修改后的代码
Y, X = np.meshgrid(x, y)
plt.contourf(X, Y, t, 30)
# 也可以写为
X, Y = np.meshgrid(x, y)
plt.contourf(X, Y, np.transpose(t[:, 100, :]), 30)
在某些情况下,我们可能需要反转 Y 轴坐标,即将最高值置于顶部,最低值置于底部。函数将 Y 轴坐标反转的方法。运行上述代码,我们可以看到 绘制 出的折线图,其中 X 轴上的数值从左到右递增,Y 轴上的数值从底部到顶部递减。首先,我们需要安装并导入 Matplotlib 库,它是一个常用的数据可视化库,提供了丰富的绘图功能。运行修改后的代码,我们可以看到 Y 轴的坐标已被反转,最高值位于顶部,最低值位于底部。函数来反转 Y 轴坐标。接下来,我们创建一些示例数据用于绘图,并 绘制 一个简单的折线图。 想画一个热力图,数据是一个三维的数组,存放的是风速,结果画出来x、 y轴 是反过来的 v1是一个192x192x192的三位数组,只画y=192/2的一个切面,明明x在前面,z在后面,结果画出来是立起来的,请问这个怎么调整顺序? 代码很简单:如下(示例): import struct import os import numpy as np import matplotlib.pyplot as plt import seaborn plt 绘制 图形,x轴上的刻度标签太长时,有4种使标签旋转的方法提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 import matplotlib.pyplot as plt x = ["2020-01-01","2020-01-02","2020-01-03","2020-01-04","2020-01-05"] y = [1,2, 文章目录1. 主次 坐标轴 2. 翻转 坐标轴 很多时候我们在进可视化的时候希望把两个不同量纲的数据绘在一张图中。比如我们希望在一张图中画出历年房子的成交量和价格变化趋势图,或者是降雨与水位的变化趋势图等。这些量纲不一样就需要用到主次 坐标轴 来实现。 1. 主次 坐标轴 import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[... 因为量纲不同我们需要用到次 坐标轴 ,因为想要表达方式不同我们需要用到 翻转 坐标轴 ,因为就学习了一下 1、次 坐标轴 这里需特别注意,纵坐标的次坐标用twinx(),横坐标的次坐标用twiny() import pandas as pd import numpy as np import matplotlib.pyplot as plt x=np.linspace(1,10,10) y1=2*x+1 y2... I used opencv to do some image processing. I tried to then plot the image on my plotter (origin at lower left), however the image is flipped. opencv's origin is in the upper left, and so the y coordin... from pyecharts.charts import * from pyecharts import options as opts from pyecharts.faker import Faker def bar_reverse_axis(): bar = Bar(init_opts=opts.InitOpts(theme='li