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