小编Mig*_*uel的帖子

PIL图像模式我是灰度吗?

我试图以整数格式而不是(R,G,B)格式指定图像的颜色.我认为我必须在模式"I"中创建一个图像,因为根据文档:

图像的模式定义图像中像素的类型和深度.当前版本支持以下标准模式:

  • 1(1位像素,黑白,每字节存储一个像素)
  • L(8位像素,黑白)
  • P(8位像素,使用调色板映射到任何其他模式)
  • RGB(3x8位像素,真彩色)
  • RGBA(4x8位像素,带透明蒙版的真彩色)
  • CMYK(4x8位像素,分色)
  • YCbCr(3x8位像素,彩色视频格式)
  • 我(32位有符号整数像素)
  • F(32位浮点像素)

然而,这似乎是一个灰度图像.这是预期的吗?有没有办法根据32位整数指定彩色图像?在我的MWE中,我甚至让PIL决定如何将"红色"转换为"I"格式.


MWE

from PIL import Image

ImgRGB=Image.new('RGB', (200,200),"red") # create a new blank image
ImgI=Image.new('I', (200,200),"red") # create a new blank image
ImgRGB.show()
ImgI.show()
Run Code Online (Sandbox Code Playgroud)

python python-imaging-library

12
推荐指数
1
解决办法
3万
查看次数

删除 matplotlib 图例中的重复标签

如果您使用 matplotlib 绘制多条线或点,有时您可能会发现重复标签的情况。例如:

for i in range(5):
    Y1=boatarrays[i]
    Y2=cararrays[i]
    ax.plot(X,Y1,color='r',label='Boats')
    ax.plot(X,Y2,color='b',label='Cars')
Run Code Online (Sandbox Code Playgroud)

如何只拥有'Boats''Cars'只出现一次?

matplotlib legend-properties

6
推荐指数
2
解决办法
2850
查看次数

在图例中分割标记和线条-Matplotlib

我想创建一个图例,在其中指定标记的值和行的值,但不能同时指定两者的组合。

这个例子应该有助于说明我的目标:

import matplotlib.pyplot as plt
import numpy as np

pi=3.14
xx=np.linspace(0,2*pi,100)


fig = plt.figure()
ax  = fig.add_subplot(111)

phases=[0,pi/4,pi/2]
markers=['s','o','^']

for phase,mk in zip(phases,markers):
    labeltext='Sine' + '*' + str(phase)
    F=[np.sin(x+phase) for x in xx]
    ax.plot(xx,F,color='b',marker=mk,label=labeltext)

    labeltext='Cosine' + '*' + str(phase)
    F=[np.cos(x+phase) for x in xx]
    ax.plot(xx,F,color='g',marker=mk,label=labeltext)

hand, labl = ax.get_legend_handles_labels()
#hand, labl = function_to_split(hand,labl,'*')
ax.legend(hand,labl)
plt.savefig('Figure.png')
Run Code Online (Sandbox Code Playgroud)

结果图如下 MWE图

我想要的是function_to_split自动以这样的图例结尾:

[blue line] Sine
[green line] Cosine
[black square] 0
[black circle] 0.785
[black triangle] 1.57
Run Code Online (Sandbox Code Playgroud)

python matplotlib legend

5
推荐指数
1
解决办法
641
查看次数

使用 Numpy 快速制作网格三角形网格

考虑一个表示节点编号的正则矩阵,如图所示:

节点和三角形

我想列出图中表示的所有三角形。这将导致以下二维列表:[[0,1,4],[1,5,4],[1,2,5],[2,6,5],...,[11,15,14]]

假设矩阵的维度是 ( NrX Nc) (在这种情况下为 (4X4) ),我可以使用以下代码实现此结果:

def MakeFaces(Nr,Nc):
    Nfaces=(Nr-1)*(Nc-1)*2
    Faces=np.zeros((Nfaces,3),dtype=np.int32)
    for r in range(Nr-1):
        for c in range(Nc-1):
            fi=(r*(Nc-1)+c)*2
            l1=r*Nc+c
            l2=l1+1
            l3=l1+Nc
            l4=l3+1
            Faces[fi]=[l1,l2,l3]
            Faces[fi+1]=[l2,l4,l3]
    return Faces
Run Code Online (Sandbox Code Playgroud)

但是,双循环操作使这种方法非常缓慢。有没有办法以聪明的方式使用 numpy 来更快地做到这一点?

python numpy mesh triangular

4
推荐指数
1
解决办法
2425
查看次数

色调影响颜色以外标记的群图

我试图让我的群图更容易以黑白方式阅读,并且对于色盲的人来说,通过让色调不仅影响颜色,还影响标记的另一个几何方面。

微量元素

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
tips = sns.load_dataset("tips")

fig, ax = plt.subplots(1,1)
ax = sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips,size=8,ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

期望的结果(左边)

在此输入图像描述

python plot seaborn swarmplot

4
推荐指数
1
解决办法
6817
查看次数

在seaborn中并排绘制两列的箱线图

我想将熊猫数据框的两列绘制为按类别并排的箱形图。这与此处提出的问题不同:Grouped boxplot with seaborn,其中两列内部有列表。那里的解决方案对我不起作用。

移动电源

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(
[
[2, 4, "A"],
[4, 5, "C"],
[5, 4, "B"],
[10, 4.2, "A"],
[9, 3, "B"],
[3, 3, "C"]
], columns=['data1', 'data2', 'Categories'])

#Plotting by seaborn
fig, axs = plt.subplots(1, 1)
sns.boxplot(data=df,x="Categories",y='data1',ax=axs)
fig.show()
plt.waitforbuttonpress()
plt.close(fig)
Run Code Online (Sandbox Code Playgroud)

上面的代码生成: 在此处输入图片说明

用箱线图中的“data2”替换“data1”将给出: 在此处输入图片说明

我想要的是这样的: 在此处输入图片说明

python seaborn

3
推荐指数
1
解决办法
5765
查看次数

用宽线修复PIL.ImageDraw.Draw.line

从PIL文档中:

PIL.ImageDraw.Draw.line(xy,fill = None,width = 0)

在xy列表中的坐标之间绘制一条线。

参数:

  • xy –由[[x,y),(x,y),...]等2元组或[x,y,x,y,...]等数值组成的序列。
  • fill –用于行的颜色。
  • width –线宽,以像素为单位。请注意,线连接处理不当,因此宽的折线看起来不太好。

我正在寻找解决此问题的方法。对我来说,一个好的解决方案是使线由PIL.ImageDraw圆角的末端(capstylein TKinter)绘制。有对应的PIL.ImageDraw吗?

这是我想要获得的: 在此处输入图片说明

最小的工作示例:

from PIL import Image, ImageDraw

WHITE = (255, 255, 255)
BLUE = "#0000ff"
MyImage = Image.new('RGB', (600, 400), WHITE)
MyDraw = ImageDraw.Draw(MyImage)

MyDraw.line([100,100,150,200], width=40, fill=BLUE)
MyDraw.line([150,200,300,100], width=40, fill=BLUE)
MyDraw.line([300,100,500,300], width=40, fill=BLUE)

MyImage.show()
Run Code Online (Sandbox Code Playgroud)

MWE的结果:

在此处输入图片说明

python python-imaging-library pillow

2
推荐指数
2
解决办法
1806
查看次数