Para casos simples yo uso GeoGebra 5, pero si es para programar en Python, intentaré dar una respuesta (nunca había escuchado sobre matplotlib).
En esta galería se pueden ver un montón de maneras de usar la gráfica.
http://matplotlib.org/gallery.html
De tantos que hay, puedo elegir uno para 2D y otro para 3D, los que creo que son más acertados para esos casos.
Para 2D: http://matplotlib.org/examples/lines_bars_and_markers/fill_demo.html
Para 3D: http://matplotlib.org/examples/mplot3d/offset_demo.html
En ambos casos es necesario NumPy.
ArcoSeno (arcsin) de x
import numpy as np
import matplotlib.pyplot as plt
#Yo supongo que es el intervalo [-1,1] del eje "x"...
#...y la altura "y" es automática.
x = np.linspace(-1,1)
#Cambio el sin del ejemplo por arcsin
y = np.arcsin(x)
plt.fill(x, y, 'r')
plt.grid(True)
plt.show()
.
ArcoCoseno (arccos) de x (lo mismo pero cambio la función)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,1)
#arccos (ArcoCoseno)
y = np.arccos(x)
plt.fill(x, y, 'r')
plt.grid(True)
plt.show()
.
Para cos(x)+cos(y). Justo en el ejemplo muestran algo parecido, así que modifico un poco el código (no sé que intervalo usará).
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
#Supongo que esos números son el intervalo en muchos ejes
X, Y = np.mgrid[0:6*np.pi:0.25, 0:4*np.pi:0.25]
#En el ejemplo era la raíz cuadrada del absoluto de cos(x)+cos(y), le quito todo eso
Z = np.cos(X) + np.cos(Y)
# + 1e5 creo que no sirve, de igual manera, lo quito
surf = ax.plot_surface(X, Y, Z, cmap='autumn', cstride=2, rstride=2)
ax.set_xlabel("X-Label")
ax.set_ylabel("Y-Label")
ax.set_zlabel("Z-Label")
ax.set_zlim(0, 2)
plt.show()