小编tdy*_*tdy的帖子

How to plot a dot plot type scatterplot in matplotlib or seaborn?

Let's say I have a df like this:

df = pd.DataFrame({'col1': list('aabbb'), 'col2': [1, 3, 1, 5, 3]})

  col1  col2
0    a     1
1    a     3
2    b     1
3    b     5
4    b     3
Run Code Online (Sandbox Code Playgroud)

I would like to see a plot, where on the x axis, I have the col1 names ONCE, and on the y axis, the col2 data, as individual dots, so above 'a' I would have two dots at the height of 1 and 3, and …

python scatter matplotlib seaborn dot-plot

3
推荐指数
1
解决办法
6382
查看次数

如何在seaborn中绘制前5个值

如何绘制该图中看起来最大的前 5 个值?( Wii, NES, GB, DS, X360)

sns.violinplot(x=df['Global_Sales'],y=df['Platform'],data=df)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python matplotlib pandas

3
推荐指数
1
解决办法
1万
查看次数

如何根据列值使用标记绘制散点图

我正在尝试通过分组绘制一些数据的散点图。它们按列分组,我希望它们根据组group具有不同的标记样式。

最少的工作代码

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

colors = ['r','g','b','y']
markers = ['o', '^', 's', 'P']

df = pd.DataFrame()
df["index"] = list(range(100))
df["data"] = np.random.randint(100, size=100)
df["group"] = np.random.randint(4, size=100)
df["color"] = df.apply(lambda x: colors[x["group"]], axis=1)
df["marker"] = df.apply(lambda x: markers[x["group"]], axis=1)

plt.scatter(x=df["index"], y=df["data"], c=df["color"])
# What I thought would have worked
# plt.scatter(x=df["index"], y=df["data"], c=df["color"], marker=df["marker"])
plt.show()
Run Code Online (Sandbox Code Playgroud)

示例_输出

我想要的是

我希望这些组也有不同的标记样式。例如,红色条目将具有标记“o”(大点),绿色条目将具有标记“^”(向上三角形)等。

我尝试过的

我想

plt.scatter(x=df["index"], y=df["data"], c=df["color"], marker=df["marker"])
Run Code Online (Sandbox Code Playgroud)

本来可以,但是不行……

TypeError: 'Series' objects …
Run Code Online (Sandbox Code Playgroud)

python matplotlib dataframe pandas

3
推荐指数
1
解决办法
7626
查看次数

如何在 matplotlib 中用沿线旋转的文本注释线

我想在中间有文本的两点之间添加注释,并旋转文本以与线对齐。当前示例未按预期旋转:

import matplotlib.pyplot as plt
import numpy as np

def ann_distance(ax,xyfrom,xyto,text=None):
    midx = (xyto[0]+xyfrom[0])/2
    midy = (xyto[1]+xyfrom[1])/2
    if text is None:
        text = str(np.sqrt( (xyfrom[0]-xyto[0])**2 + (xyfrom[1]-xyto[1])**2 ))

    ax.annotate("",xyfrom,xyto,arrowprops=dict(arrowstyle='<->'))
    p1 = ax.transData.transform_point((xyfrom[0], xyfrom[1]))
    p2 = ax.transData.transform_point((xyto[0], xyto[1]))
    rotn = np.degrees(np.arctan2(p2[1]-p1[1], p2[0]-p1[0]))
    ax.text(midx,midy,text,ha='center', va='bottom',rotation=rotn,fontsize=16)
    return

x = np.linspace(0,2*np.pi,100)

width = 800
height = 600

fig, ax = plt.subplots()
ax.plot(x,np.sin(x))
ann_distance(plt.gca(),[np.pi/2,1],[2*np.pi,0],'$sample$')
plt.show()
Run Code Online (Sandbox Code Playgroud)

电流输出: 在此输入图像描述

python matplotlib

3
推荐指数
1
解决办法
1320
查看次数

来自 scipy.stats.rv_continuous 的自定义 PDF 不需要的上限

我正在尝试生成具有一定光度的 QSO 的随机概率密度函数,其形式为:

1/( (L/L_B^* )^alpha + (L/L_B^* )^beta )

其中 L_B^*、alpha 和 beta 都是常量。为此,使用以下代码:

import scipy.stats as st

logLbreak = 43.88
alpha = 3.4
beta = 1.6


class my_pdf(st.rv_continuous):

    def _pdf(self,l_L): 
        #"l_L" in this is always log L        
        L = 10**(l_L/logLbreak)
        D = 1/(L**alpha + L**beta)
        return D

dist_Log_L = my_pdf(momtype = 0, a = 0,name='l_L_dist')


distro = dist_Log_L.rvs(size = 10000)
Run Code Online (Sandbox Code Playgroud)

(L/L^* 被提升到 10 的幂,因为一切都是以对数刻度进行的)

该分布应该生成一个近似于 的图形逐渐趋于无穷大,但实际上它生成的图形看起来像这样(10,000 个样本)。无论使用多少样本,上限都是相同的。它受到这样的限制有什么原因吗?

python statistics astronomy scipy probability-density

2
推荐指数
1
解决办法
1178
查看次数

用切片删除所有其他元素

考虑一下:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

这些是 Python 中删除元素的正确语句:

numbers[0:2] = []
numbers[3:5] = []
Run Code Online (Sandbox Code Playgroud)

但是下面的语句是不允许的:

numbers[::2] = []
Run Code Online (Sandbox Code Playgroud)

ValueError:尝试将大小为 0 的序列分配给大小为 5 的扩展切片

是什么阻止了 Python 中的这种语句?

python

2
推荐指数
1
解决办法
86
查看次数

如何按多列对数据帧行进行排序

我在以特定样式格式化数据框时遇到问题。我想要将与一个相关的数据S/N全部聚集在一起。我对数据集的最终目标是绘制所有S/Ns 的 Dis 与 Rate 的关系图。我已经厌倦了迭代行来切片数据,但这并没有奏效。这种格式化的最佳(最简单)方法是什么?谢谢!

例如:S/N332 在第一行有Dis4.6 和Rate91.2,紧接着我希望它有S/N332、9.19DisRate76.2,依此类推,对于所有有S/N332 的行。

    S/N      Dis       Rate
0   332   4.6030  91.204062
1   445   5.4280  60.233917
2   999   4.6030  91.474156
3   332   9.1985  76.212943
4   445   9.7345  31.902842
5   999   9.1985  76.212943
6   332  14.4405  77.664282
7   445  14.6015  36.261851
8   999  14.4405  77.664282
9   332  20.2005  76.725955
10  445  19.8630  40.705467
11  999  20.2005  76.725955
12 …
Run Code Online (Sandbox Code Playgroud)

python dataframe python-3.x pandas

2
推荐指数
1
解决办法
1797
查看次数

如何增加条形图和条形标签之间的间距?

绘图和值(204 kwh、604 kwh、60 kwh)之间的空间太小。如何将这些值移高一点并增加间距?

我拥有的:

我想要的是:

代码:

x_name = ['Average\nneighborhood\u00b9', 'Your\nconsumption', 'Efficient\nneighborhood\u00b2']
plt.figure(facecolor='#E2EBF3')
fig = plt.figure(figsize=(12,10))
plt.bar(x_name, val, color =['cornflowerblue', 'saddlebrown', '#196553'],width = .8)
plt.margins(x = .1 , y = 0.25)

plt.xticks(fontsize=25)
plt.yticks([])
 
hfont = {'fontfamily':'serif'}

for index, value in enumerate(np.round(val,2)):
  plt.text(index,value, str(value)+" kWh",fontsize=25, ha='center', va = 'bottom',**hfont)
Run Code Online (Sandbox Code Playgroud)

python matplotlib bar-chart

2
推荐指数
1
解决办法
4680
查看次数

如何在 matplotlib 中绘制特定日期的垂直线

如何在特定日期向此图表添加垂直线标记?Week end是日期列。

fig, ax = plt.subplots(figsize=(20,9))
thirteen.plot.line(x='Week end', y='OFF', color='crimson', ax=ax)
thirteen.plot.line(x='Week end', y='ON', color='blue', ax=ax)
ax.set_ylim(bottom=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出图像

python datetime matplotlib pandas

2
推荐指数
1
解决办法
5083
查看次数

Python 对每一列中的 0 和 1 进行计数和分组

三列 A、B 和 C 填充有 0 和 1。我需要计数摘要,但使用 python 按每列中的相同值(0 和 1)进行分组。谢谢

这是示例数据和输出:

在此输入图像描述

python sql dataframe pandas

2
推荐指数
1
解决办法
289
查看次数