我最近发现了seaborn,发现有很多可能的风格组合。目前,我只是使用默认的 Seaborn 配置,以改进 matplotlib 风格来绘制数据(基本上是点系列或函数图,而不是真正的统计数据)。
感谢Prettyplotlib我发现了 Seaborn 。
有没有人已经考虑过一个“安全”主题,它可以很好地渲染绘图功能,并旨在为色盲人士或黑白打印提供良好的渲染?
谢谢
编辑:我目前正在体验“hls”和“Set2”调色板。后者似乎对色盲有好处,但我认为黑白渲染效果很差。=(
我有一个多级索引数据框,我试图在 Seaborn 中显示它。该图显示正常,但 x 轴的值被视为文本标签而不是实际的 x 值。下面的代码片段显示了示例数据的制作和绘制方式:
>>> import numpy, pandas, seaborn
>>> from matplotlib import pyplot
>>> index = pandas.MultiIndex.from_product((list('abc'), [10**x for x in range(4)]), names=['letters', 'powers'])
>>> index
MultiIndex(levels=[['a', 'b', 'c'], [1, 10, 100, 1000]],
labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]],
names=['letters', 'powers'])
>>> df = pandas.DataFrame(numpy.random.randn(12, 2), index=index, columns=['x', 't'])
>>> df
x t
letters powers
a 1 1.764052 …Run Code Online (Sandbox Code Playgroud) 我的目的是在seaborn的特定坐标处添加补丁lmplot:
有没有办法添加一个矩形/正方形补丁lmplot?
我能够通过 打印出情节sns.lmplot()。但是当我尝试使用ax.add_patch()具有相关坐标的语句添加矩形面片时,出现错误。
#Sample code to generate lmplot and add patch
ax= sns.lmplot('A', 'B', hue="group", data=res_me,fit_reg=False, \
palette="Set1",size=10, aspect=1, scatter_kws={"s": 100,"linewidths":2,"edgecolor":"black"})
ax.add_patch(patches.Rectangle((0.912, 0.72), 1.02, .802,fill=False,edgecolor='green',lw=3))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
AttributeError: 'FacetGrid' object has no attribute 'add_patch'
Run Code Online (Sandbox Code Playgroud)
那么我们可以添加补丁吗FacetGrid?
我有一个 DataFrame,其中每一行都是一个事件,它有一列datetime指定事件日期和时间的值。
我只想绘制每天的事件数量,并能够指定 x 轴的开始和结束日期。我怎样才能做到这一点?
我正在尝试将数据绘制到 matplotlib 中的图形和相应的轴上,随着新工作的出现,请回忆一下轴上带有附加图的图形:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
x=np.arange(0,20)
y=2*x
fig,ax=plt.subplots()
ax.scatter(x,x)
ax.scatter(x,y)
fig
Run Code Online (Sandbox Code Playgroud)
如果我使用 seaborn 的 regplot,这与 matplotlib 配合得很好:
fig2,ax2=plt.subplots()
sns.regplot(x,x,ax=ax2,fit_reg=False)
sns.regplot(x,y,ax=ax2,fit_reg=False)
fig2
Run Code Online (Sandbox Code Playgroud)
Fig2 生成我想要的图形,但 regplot 命令生成一个空图形。有没有办法抑制 regplot 的空输出或让它显示更新的 ax2 而不调用Fig2?
我正在使用seaborn 创建水平条形图。从这个例子来看,我是如何设置颜色的。
sns.set_color_codes("pastel")
sns.barplot(x="total", y="abbrev", data=crashes, label="Total", color="b")
Run Code Online (Sandbox Code Playgroud)
因此,在此示例中,“总计”字段将具有来自“粉彩”调色板的颜色“b”(蓝色)。
我有大约 60 个不同的字段,并且我不想手动设置所有颜色。有没有办法让seaborn自动选择颜色(甚至调色板)?
就目前情况而言,我的计划是在一个周期中创建条形图
for field in fields:
sns.set_color_codes(foo)
sns.barplot(x=field, y="abbrev", data=crashes, label=field, color="bar")
Run Code Online (Sandbox Code Playgroud)
其中foo和bar是由seaborn以某种方式为我生成的。
我想给字符串着色,但每个字符都不同。我有一个包含文本的数组和一个值在 -1 到 1 之间的数组,其中 -1 应该代表“红色”,1 应该代表“绿色”。0 可以是白色、黄色或介于红色和绿色之间的褪色。
每个角色都应该有与得分有关的颜色。
数据如下:
array([['a', 'c', 'm', 'e', 't', 'e', 'l', 'l', 'm', 'e'],
['0.1716490432811229', '0.062389299621661884',
'0.26545182258229466', '-0.07999088246625552',
'-0.4499291603930515', '-0.7465421931327068', '-0.812006046307664',
'-0.8443500193245104', '-0.865253671942029','-0.8697487071105282',]],
dtype='<U32')
Run Code Online (Sandbox Code Playgroud)
我能够生成颜色:
import matplotlib as mpl
import matplotlib.cm as cm
norm = mpl.colors.Normalize(vmin=-1, vmax=1)
cmap = cm.RdYlGn
x = 0.3
m = cm.ScalarMappable(norm=norm, cmap=cmap)
#print(m.to_rgba(x))
color = m.to_rgba(ws)
color
Run Code Online (Sandbox Code Playgroud)
结果如下所示(r、g、b、a):
array([[ 0.87435602, 0.94709727, 0.57708574, 1. ],
[ 0.9561707 , 0.98154556, 0.68904268, 1. ],
[ 0.83529412, 0.93048827, 0.5349481 , 1. ], …Run Code Online (Sandbox Code Playgroud) 无法更改无花果大小,请参见示例:
df = pd.DataFrame({'subset_product':['A','A','A','B','B','C','C'],
'subset_close':[1,1,0,1,1,1,0]})
prod_counts = df.groupby('subset_product').size().rename('prod_counts')
df['prod_count'] = df['subset_product'].map(prod_counts)
g = sns.factorplot(y='prod_count',x='subset_product',hue='subset_close',data=df,kind='bar',palette='muted',legend=False,ci=None)
plt.rcParams["figure.figsize"] = [20,10]
plt.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)
尽管改变了Figsize,它总是给我相同的绘图大小和一个空的绘图
我有以下数据:
coll_prop_tenure coll_prop_12m coll_prop_6m coll_prop_3m
0.04 0.04 0.06 0.08
0 0 0 0
0 0 0 0
0.06 0.06 0.1 0
0.38 0.38 0.25 0
0.61 0.61 0.66 0.61
0.01 0.01 0.02 0.02
0.1 0.1 0.12 0.16
0.04 0.04 0.04 0.09
0.22 0.22 0.22 0.22
0.72 0.72 0.73 0.72
0.39 0.39 0.45 0.64
Run Code Online (Sandbox Code Playgroud)
我使用 seaborn 的 distplot 来绘制分布图,如下所示:
######################## density plot #########################################
f, axes = plt.subplots(2, 2, figsize=(7, 7), sharex=True)
sns.distplot( data[cols_viz[0]] , color="skyblue", ax=axes[0, 0])
print("Skewness: %f" % data[cols_viz[0]].skew()) …Run Code Online (Sandbox Code Playgroud) 我有 2 个数据框,其中包含品牌和计数列。
例子:
brand | count
------+-------
Gucci | 1234
Chanel| 234444
Run Code Online (Sandbox Code Playgroud)
DF1比DF2拥有更多品牌。我想创建一个条形图,其中 x 轴是所有品牌,y 轴是计数。我不知道如何实现这一点,所以我得到了按品牌分组的每个数据框的并排条形图。
ax = df_pred.plot()
prev_pred.plot(ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我尝试了这段代码,但无法将其按品牌分组。我使用 sns.barplot 创建单独的条形图,但我想覆盖它们。我想要 DF1 中的所有品牌,因此 DF2 中的一些计数将为 0,但这就是我想要比较的。任何帮助深表感谢。