使用PyPlot将具有像素值的CSV渲染到图像

时间:2018-01-24 03:09:25

标签: python matplotlib

我尝试在CSV中绘制白色黑线图片作为原始数据。 1为黑色,0为白色。

所以我可以修改1~0之间的值,以便将来绘制灰度图像。

我遇到了问题。输出图像分辨率不遵循原始数据。

原始原始数据的值为1080 * 2160,介于1~0之间。 1 * 1比例是一个像素。

import matplotlib.pyplot as plt
data = pd.read_csv('python line.csv', encoding='big5')
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Greys)
ax.invert_yaxis()
ax.xaxis.tick_top()

Current output

Input spreadsheet

1 个答案:

答案 0 :(得分:1)

我认为你的代码一切都很好,但是pyplot数字的大小会强制你在图像中看到不规则的“乐队”。

如果增加图形尺寸,这可能有助于提高图像质量。为此,对{10} x 20英寸图像执行plt.figure(figsize=(10,20))。我下面的示例使用较小的图像,但您应该能够通过更改值来缩放它。

我建议你使用Python图像库(PIL)。以下是我使用Anaconda发行版中提供的工具实现此目的的方法:

from PIL import Image
import random
import pandas as pd
import matplotlib.pyplot as plt
import math
import random
%matplotlib inline

df = pd.DataFrame()
for i in range(200):
    #df[i] = [1 if i % 2 == 0 else 0 for i in range(100)]
    df[i] = [random.uniform(0, 1) for i in range(100)]

df.to_csv('data.csv', index=False)

df1 = pd.read_csv('data.csv')

im1 = Image.new('RGBA', (200,100),'white')
pixels = []
white = (255,255,255)
black = (0,0,0)
for i, row in df1.iterrows():
    for j in range(df1.shape[1]):
        c = math.floor(float(row[j])*255)
        pixels.append((c,c,c))

im1.putdata(pixels)
plt.figure(figsize=(10,5))
imgplot = plt.imshow(im1)

enter image description here