【问题标题】:Is there a function in python to determine the color of a specified point in a plot?python中是否有一个函数可以确定图中指定点的颜色?
【发布时间】:2021-12-17 04:10:37
【问题描述】:

如果提供了坐标,我需要 matplotlib 中的函数来提取点的颜色或颜色值。我打算做的是:

import matplotlib.pyplot as plt
x=int(input("x coordinate: "))
y=int(input("y coordinate: "))
plt.plot(x,y,color='blue')
c=plt.<extract_color_function>(x,y) #this must store the color(as a String)/colour value(as a tuple)
if c=='black':
   <do something>
else:
   <do something>

这里, 是我需要的。 pyplot 模块中有这样的东西吗?如果没有,您能推荐一些替代方案吗?

【问题讨论】:

  • plt.plot 返回一个 Artist 对象。它将视觉信息存储为属性

标签: python matplotlib plot colors graphics


【解决方案1】:

由于您想首先对绘图进行颜色检测,因此您需要将绘图转换为 RGB 格式的图像。所以要做到这一点,我们首先需要从缓冲区中抓取图像并将其转换为 3D 数组。对于这个过程,我们需要 ioopencv

import matplotlib.pyplot as plt
import cv2
import io
import numpy as np

figsize = #some figsize you want
fig = plt.figure(figsize = figsize)
ax = fig.add_subplot(111)
x=int(input("x coordinate: "))
y=int(input("y coordinate: "))
ax.plot(x,y,color='blue')

buf = io.BytesIO()
fig.savefig(buf, format = 'png', dpi = 180 )
buf.seek(0)
img_arr = np.frombuffer(buf.getvalue(), dtype = np.uint8 )
buf.close()
img = cv2.imdecode(img_arr,1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB )

这会将您的绘图转换为 RGB 3D 图像,该图像存储为 img 中的 numpy 数组。请注意,我没有在函数中保留此转换,唯一的原因是此处理完成一次,然后多次使用输出。您可以将它放在函数中,但不建议这样做,因为从您的函数中我可以看到您将多次使用它进行颜色检测。因此,请少量执行此处理并多次检查结果。

您的提取函数将获取此 3D 数组,获取点 x,y 的 RGB 值并将其转换为十六进制颜色代码。

def rgb_to_hex(x,y):
   rgb = ( img[x,y,0], img[x,y,1], img[x,y,2] )
   return ( "#%02x%02x%02x" % rgb )

这将返回您可以检查“黑色”的十六进制代码

c = rgb_to_hex(x,y)
if c == '#000000':
  pass
else
  pass

注意:您可以省略十六进制转换,因为您可以直接检查为特定单元格的颜色创建的元组。

最后必须注意,如果 x,y 相对于不是图像左上角的原点。我的代码中使用的 x,y 绝对是左上角的原点。

我的回答结合了
https://stackoverflow.com/a/3380739/17315172
https://stackoverflow.com/a/58641662/17315172

中的想法

我愿意接受此代码中的任何更正和建议。

【讨论】:

    【解决方案2】:

    我认为您必须切换到 SVG,因为与在 python 中使用 matplotlib 相比,它更易于使用。

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 2021-02-27
      • 2010-10-20
      • 2016-01-22
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多