【发布时间】:2018-09-06 13:53:15
【问题描述】:
如何像模式一样用图像填充条形图的条形?
以下是我的发现或相关问题:
到目前为止,我找到了this useful post。它可以帮助我输出像this 这样的图表。这已经非常接近我想要的了。
但是,我想要像this post 这样的效果。不幸的是,这是一篇 JS 帖子。我只想在达到 1 时用图像填充条形图,相应地在达到 2 时填充两次。对于十进制,它会裁剪图像或调整其大小以适合条形。
这是我的游乐场代码。
from matplotlib.ticker import FuncFormatter
import matplotlib.pyplot as plt
import numpy as np
import imageio
import math
def image_plot(heights, images, spacing=0):
# Iterate through images and data, autoscaling the width to
# the aspect ratio of the image
for i, (height, img) in enumerate(zip(heights, images)):
width = 1
left = width*i
right = left + width
plt.imshow(img, extent=[left, right, 0, height])
# Set x,y limits on plot window
plt.xlim(0, right)
plt.ylim(0, max(heights)*2)
data = {"success": True,
"message": {
"portion": "100g",
"nickname": "",
"trans-fat(g)": "NA",
"carbohydrates(g)": "42",
"type": "breakfast",
"sugar(g)": "14",
"energy(kcal)": "260",
"fat(g)": "7.3",
"fiber(g)": "1.6",
"cholesterol(mg)": "17",
"protein(g)": "7.3",
"Na(mg)": "290",
"name": "Pork Burger"
}
}
msg = data["message"]
x = np.arange(5)
values = [msg["energy(kcal)"], msg["protein(g)"], msg["fat(g)"], msg["sugar(g)"], msg["Na(mg)"]]
values = list(map(float, values))
compare = [457.0,4.68,33.15,34.98,196.38]
values[0] = values[0]/compare[0]
values[1] = values[1]/compare[1]
values[2] = values[2]/compare[2]
values[3] = values[3]/compare[3]
values[4] = values[4]/compare[4]
label = ['energy(kcal)', 'protein(g)', 'fat(g)', 'sugar(g)', 'sodium(mg)']
demaeitcho_img = imageio.imread('./img/damaeitcho.png')
soymilk_img = imageio.imread('./img/soymilk.png')
beefpho_img = imageio.imread('./img/beefpho.png')
coke_img = imageio.imread('./img/coke.png')
luncheonmeat_img = imageio.imread('./img/luncheonmeat.png')
imgs = [demaeitcho_img,soymilk_img,beefpho_img,coke_img,luncheonmeat_img]
image_plot(values, imgs, spacing=0)
plt.xticks(x, ("DemaeItcho","SoyMilk","BeefPho","Coke","LuncheonMeat"), color='orange')
- 我需要为每张图片调用“plt.imshow()”吗?
- 是否必须使所有图像具有相同的大小才能在条形上执行更好的纹理映射?
【问题讨论】:
-
是的,您需要致电
imshow获取所有图像。因此,如果一个条形图包含 3 次相同的图像,您调用imshow3 次。准备类似比例的图像以使条看起来不歪斜当然是有意义的。 -
@ImportanceOfBeingErnest Thx 伙计,我想我已经找到了方法 :D 现在要回答我的问题,因为任何人都在寻找这种东西
-
在 Markdown 中实现分段,请不要使用
<br><br>,只需使用两个回车即可。问题很少需要换行。 -
嗯...你的意思是使用
吗?我只是在谷歌上搜索了一下。很抱歉那个双重
,我不知道使用这个问题编辑器的标准。
标签: matplotlib python-3.5