首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Matplotlib或Seaborn中用小的空格分隔成地块?

如何在Matplotlib或Seaborn中用小的空格分隔成地块?
EN

Stack Overflow用户
提问于 2020-03-15 01:16:30
回答 2查看 112关注 0票数 0

我想用用小空格分隔的多列制作这种类型的图,每个类都有3-5 (本例中的5)不同的观测值,y轴上的值也不同:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-15 02:06:00

下面是使用Python的matplotlib绘制类似图的方法。该地块有灰色背景和白色的主要和次要的网格线来划定区域。在每个小细胞的中心得到点有点棘手:分裂成n+1空间,移动半个单元格(1/2n)。辅助x轴可以用来设置标签.必须将zorder设置为在网格线上有点。

代码语言:javascript
运行
复制
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import ticker

n = 5
cols = 7
values = [np.random.uniform(1, 10, n) for c in range(cols)]

fig, ax = plt.subplots()
ax.set_facecolor('lightgrey')
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1 / (n)))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
ax.grid(True, which='both', axis='both', color='white')
ax.set_xticklabels([])
ax.tick_params(axis='x', which='both', length=0)
ax.grid(which='major', axis='both', lw=3)
ax.set_xlim(1, cols + 1)
for i in range(1, cols + 1):
    ax.scatter(np.linspace(i, i + 1, n, endpoint=False) + 1 / (2 * n), values[i-1], c='crimson', zorder=2)

ax2 = ax.twiny()
ax2.set_xlim(0.5, cols + 0.5)
ticks = range(1, cols + 1)
ax2.set_xticks(ticks)
ax2.set_xticklabels([f'Cat_{t:02d}' for t in ticks])
bbox = dict(boxstyle="round", ec="limegreen", fc="limegreen", alpha=0.5)
plt.setp(ax2.get_xticklabels(), bbox=bbox)
ax2.tick_params(axis='x', length=0)

plt.show()

票数 1
EN

Stack Overflow用户

发布于 2020-03-15 01:49:39

实际上,我可以用ggplot2绘制这个情节。例如:

代码语言:javascript
运行
复制
head(mtcars)
# mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

library(dplyr)
library(ggplot2)
mtcars %>% reshape2::melt() %>% 
  ggplot(aes(x = variable, y = value)) + 
  geom_point() + facet_grid(~ variable) +
  theme(axis.text.x = element_blank())

在数据集中设置一个分类变量,然后使用facet_grid(~).this函数可以通过categrical变量将绘图转换为多个绘图。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60688865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档