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

Python 使用PyPlot将具有像素值的CSV渲染到图像,python,matplotlib,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(d

我尝试在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()


我认为您的代码一切正常,但pyplot图形的大小迫使您在图像中看到不规则的“条纹”

如果增加体形大小,这可能有助于提高图像质量。要做到这一点,需要对10英寸x20英寸的图像执行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)

使用matplotlib进行此作业有什么特殊原因吗?它不是为完成任务而建造的;就个人而言,我会使用一个较低级别的界面,比如——注意自述文件中的
from_array
用法前端和中心。我是一个初学者。由于Anaconda环境找不到PyPNG,但我将很快尝试。我修改了您的代码并成功地绘制了一个黑白线条图案。:)@陳信利 酷!这是我学会用python做的第一件事之一