小编tdy*_*tdy的帖子

在 matplotlib 中延伸线段

matplotlib有没有类似于MATLAB的行扩展的功能?

我基本上是在寻找一种将线段延伸到绘图的方法。我目前的情节是这样的。

在查看了另一个问题并应用了公式之后,我能够将其放到这里,但它看起来仍然很混乱。

这里有人有神奇的公式吗?

python plot matplotlib

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

如何使用 axisartist 设置脊柱线的边界?

我如何设置 的界限axisartist.axis[].line

使用普通 API,可以通过以下方式设置轴脊柱的边界:

ax.spines['right'].set_bounds(low=0.01,high=0.1)
Run Code Online (Sandbox Code Playgroud)

axisartist没有spines对象。相反,脊柱线是用 实现的ax.axis['left'].line,它没有get_boundsset_bounds方法。

例子:

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
import seaborn as sns

use_artist = True

x = np.random.random(10)
y = np.random.random(10)

x.sort()
y.sort()

if use_artist:
    fig = plt.figure()
    ax = fig.add_subplot(axes_class=axisartist.Axes)
else:
    fig, ax = plt.subplots()
    
ax.scatter(x, y, marker="o")

if use_artist:
    ax.axis['right'].set_visible(False)
    ax.axis['top'].set_visible(False)
    
    # HOW TO SET BOUNDS OF ax.axis['left'].line here?
    
else:
    sns.despine()
    ax.spines['left'].set_bounds(ax.get_yticks()[1], ax.get_yticks()[-2])
    ax.spines['bottom'].set_bounds(ax.get_xticks()[1], …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

6
推荐指数
1
解决办法
405
查看次数

GLMakie 图 x 轴的量化失真。为什么?

我使用以下命令创建一个简单的绘图GLMakie

GLMakie.scatter( range((-3e-9+1e-3)..(3e-9+1e-3),100), range(1..100,100) )
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

看起来 x 轴被严重量化了。该Plots包可以很好地处理相同的命令:

Plots.scatter( range((-3e-9+1e-3)..(3e-9+1e-3),100), range(1..100,100) )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

GLMakie如果 x 范围以 0 为中心,也可以处理相同的图:

GLMakie.scatter( range((-5e-9)..(5e-9),100), range(1..100,100) )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

为什么会发生这种情况?是否GLMakie使用较小的浮子来提高速度?我可以做些什么来避免这种情况吗?

julia makie.jl

6
推荐指数
1
解决办法
248
查看次数

反转轴方向 Altair

由于某种原因,使用 Altair 绘图时的 Y 轴似乎是反转的(预计值从绘图的较低(底部)到较高(顶部))。另外,我希望能够更改滴答频率。对于旧版本,我可以使用ticks=n_ticks,但现在看来这个参数只能采用布尔值。

\n
import altair as alt\nalt.renderers.enable(\'notebook\')\n\neff_metals =  pd.read_excel(filename, sheet_name=\'summary_eff_metals\')\npoints = alt.Chart(eff_metals, height=250, width=400).mark_circle().encode(\n    x=alt.X(\'Temperature:Q\',axis=alt.Axis(title=\'Temperature (\xc2\xb0C)\'),\n            scale=alt.Scale(zero=False, padding=50)),\n    y=alt.Y(\'Efficiency:N\',axis=alt.Axis(title=\'Efficiency (%)\'),\n            scale=alt.Scale(zero=False, padding=1)),\n    color=alt.Color(\'Element:N\'),\n)\ntext = points.mark_text(align=\'right\', dx=0, dy=-5).encode(\n    text=\'Element:N\'\n)\nchart = alt.layer(points, text, data=eff_metals, \n                  width=600, height=300)\nchart\n
Run Code Online (Sandbox Code Playgroud)\n

以及图:\n在此输入图像描述

\n

python axis altair

5
推荐指数
1
解决办法
4617
查看次数

Seaborn 条形图来自列表而不是数据框

我正在尝试将我的图转换为Seaborn,但我遇到了多个条形图的问题。数据是列表的列表,如下所示:

raw_data = [[47.66773437098896, 47.585408826566024, 45.426437828641106, 44.955787935926836], 
           [47.700582993718115, 47.59796443553682, 45.38896827262796, 44.80916093973529], 
           [47.66563311651776, 47.476571906259835, 45.21460968763448, 44.78683755963528], 
           [47.248523637295705, 47.42573841363118, 45.52890109500238, 45.10243082784969], 
           [47.14532745960979, 47.46958795222966, 45.4804195003332, 44.97715435208194], 
           [46.61620129160194, 47.316775886868584, 45.053032014046366, 44.527497508033704]]
Run Code Online (Sandbox Code Playgroud)

我的简单seaborn脚本如下:

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

def plot_sns(raw_data):
  data = np.array(raw_data)

  x = np.arange(len(raw_data))
  width = 0.2  # width of bar

  sns.axes_style('white')
  sns.set_style('white')

  ax = sns.barplot(x, data[:,0])
Run Code Online (Sandbox Code Playgroud)

这会产生以下图: 在此输入图像描述

我想在图表中并排添加更多条形(每组 4 个条形)。在 Matplotlib 中,我通过绘制右侧间隔的另一个条形来实现这一点,但在 Seaborn 中它不起作用。我看到的所有示例都使用 Pandas 数据框。

python bar-chart seaborn grouped-bar-chart

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

Seaborn 线图对数刻度

我在向绘图中添加对数 X 轴时遇到问题。我想使用方法显示基于样本大小的结果AB并且C.

我的数据框:

            A         B         C
15   0.733333  0.613333  0.733333
30   0.716667  0.693333  0.766667
59   0.733684  0.678485  0.745763
118  0.796667  0.726087  0.779661
236  0.817862  0.788333  0.838983
470  0.832125  0.814468  0.836170
Run Code Online (Sandbox Code Playgroud)

我正在努力做的事情:

sample_count = np.around(np.logspace(math.log10(15),math.log10(470),6))
sample_count = sample_count.astype(int)

sns.set_style('whitegrid')
g_results=sns.lineplot(data=results,dashes=0,markers=['o','o','o'])
g_results.set(xticks=sample_count)
g_results.set(xscale='log')
Run Code Online (Sandbox Code Playgroud)

然而,结果并不是我真正想要的,因为滴答声完全消失了:

电流输出

如果没有最后xscale一行,它看起来像这样,当然这是线性比例,但这次使用正确的刻度:

没有 xscale 的电流输出

我想要实现的是这样的:

期望的输出

我很感激你对我的问题的帮助。

python line-plot seaborn

5
推荐指数
1
解决办法
1279
查看次数

pd.json_normalize() 给出“str 对象没有属性‘值’”

我手动创建一个 DataFrame:

import pandas as pd
df_articles1 = pd.DataFrame({'Id'   : [4,5,8,9],
                            'Class':[
                                        {'encourage': 1, 'contacting': 1},
                                        {'cardinality': 16, 'subClassOf': 3},
                                        {'get-13.5.1': 1},
                                        {'cardinality': 12, 'encourage': 1}
                                    ]
                            }) 
Run Code Online (Sandbox Code Playgroud)

我将其导出到 csv 文件以在拆分后导入:

df_articles1.to_csv(f"""{path}articles_split.csv""", index = False, sep=";")
Run Code Online (Sandbox Code Playgroud)

我可以将其拆分为pd.json_normalize()

df_articles1 = pd.json_normalize(df_articles1['Class'])
Run Code Online (Sandbox Code Playgroud)

我将其 csv 文件导入到 DataFrame 中:

df_articles2 = pd.read_csv(f"""{path}articles_split.csv""", sep=";") 
Run Code Online (Sandbox Code Playgroud)

但这失败了:

AttributeError: 'str' 对象没有属性 'values' pd.json_normalize(df_articles2['Class'])

python json dataframe pandas

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

合并(连接)具有缺失值和不同类型(str 和 int)的 pandas 列

我有一个数据框,其中有一列包含整数,我想将其与一列包含字符串值的组合。两列都是对象数据类型。问题是这些列也可能是 NaN。

我找到的解决方案会导致不同的错误或不良结果。

我的数据框如下所示:

指数 剂量持续时间单位 剂量数量值 剂量单位 数量值
0
1 片剂
2 2
3 1 片剂
4 2 片剂

创建数据框的代码:

df = pd.DataFrame([["day",None,None,None],["day",None,"tablet(s)",None],["day",2,"tablet(s)",None],["day",1,"tablet(s)",None],["day",2,"tablet(s)",None]], columns=["dosagedurationunit","dosagequantityvalue","dosagequantityunit","quantityvalue"])
Run Code Online (Sandbox Code Playgroud)

以下答案适用于相同类型(str)的列: Combine pandas string columns with Missing Values

  • 在串联之前将列转换为 str 数据类型会产生“nan”字符串,例如“NaN Tablet(s)”。
  • 当要“连接”的列之一中有整数时,使用以下代码会导致类型错误。
df['DOSE'] = df[['dosagequantityvalue', 'dosagequantityunit']].apply(
            lambda x: None if x.isnull().all() else ' '.join(x.dropna()), axis=1)
Run Code Online (Sandbox Code Playgroud)
  • 类型错误:序列项 0:预期的 str 实例,找到 int

所需的输出数据帧:

指数 剂量持续时间单位 剂量数量值 剂量单位 数量值 标准化剂量
0 南 …

python concatenation nan dataframe pandas

5
推荐指数
1
解决办法
2106
查看次数

使用 Bootstrap 进行响应式 DIV 放置

我需要使用Bootstrap 5DIV将一些s 放入其父容器中,无论它是body、表cell还是其他容器div,如附图所示:

如果DIVs 数量为偶数,则它们应占据可用宽度的 50%,并在单行中加上 2。或者,如果DIVs 数量为奇数,则最后一个应占用可用宽度的 100%,而所有先前的仍占用可用宽度的 50%,并按 2 放置在一行中。

最好能够更改DIVs 顺序(如移动视图示例)。

使用UIKit使用一些简单的代码来实现这一点没有问题,例如

<div class="uk-grid">
    <div class="uk-width-large-1-2">DIV 1 takes 50% of available width</div>
    <div class="uk-width-large-1-2">DIV 2 takes 50% of available width</div>
    <div class="uk-width-large-1-2">DIV 3 takes 100% of available width</div>
</div>
Run Code Online (Sandbox Code Playgroud)

但无论我用 Bootstrap 的文档(以及 Stack Overflow)搜索什么,我仍然找不到解决方案。

css responsive-design twitter-bootstrap getuikit bootstrap-5

5
推荐指数
1
解决办法
2329
查看次数

pandas 查找非空值的起点和终点

我想找到一列的起点和终点并对其进行标记,如下所示:

价值 旗帜
1 开始
2
1
3
2 停止
1 开始
2 停止

python dataframe pandas

5
推荐指数
1
解决办法
847
查看次数