在调用*args
参数解压缩(x,y)
输入值后,我想在函数内部绘制散点图的多个子图。但是,我总是得到一个简单的错误:
ValueError:s必须是标量或类似浮点数组的值,其大小与x和y相同
即使将函数改为args
的替代顺序,我似乎也无法解决这个问题。
import pandas as pd
import numpy as np
from matplotlib.pyplot import plt
x = np.array([[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4],
[0.3, 0.5, 0.6, 0.2, 0.4, 0.5, 0.6, 0.5, 0.8, 0.9, 0.9, 0.8, 0.2, 0.1, 0.5, 0.6],
['r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b']])
values = pd.DataFrame(x.T, columns=['a', 'b', 'c'])
X = values[values['c'] == 'r'].iloc[ : , 0:2 ].values
Y = values[values['c'] == 'b'].iloc[ : , 0:2 ].values
def test(*args):
figs, axs = plt.subplots( 1 , 2 , figsize = ( 8 , 8 ) )
for xy , ax in zip( args , axs.flat ) :
print(xy)
ax.scatter(*xy)
test(X, Y)
plt.show()
2条答案
按热度按时间siotufzp1#
我已经实现了它与以下,所以也许有一个更干净的替代品?
tjjdgumg2#
好吧...这就是你的问题的解决方案...这可能和你的代码一样难以理解。
现在,让我们将其转换为python代码......只需查看函数,您就应该了解有关函数的所有信息,因此 *args对于函数预期行为之外的“额外”内容非常有用。
1.将X和Y与args分开,因为它们在函数内部显式使用。
1.避免zip,除非参数很简单,虽然嵌套生成器性能很好,但它对代码质量不好,在你的情况下,我会选择enumerate,因为我正在索引到一个数组,它需要尽可能具有描述性。
1.让你的调用描述性的,
*xy
不是描述性的,这个变量是什么?它是一个元组?一个ndarray?解包它会得到什么结果?如果你在里面传递X和Y,那么直接传递X和Y。